问题遇到的现象和发生背景
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
我的想法:
单独写了个函数处理十六进制到十进制,成功了。
独独处理十进制到八进制无论我放到Main中还是单独写一个函数都有问题。不理解不理解,使用system("pause")等也不行。
#include<iostream>
#include<string.h>
#include<cmath>
using namespace std;
unsigned long long shiliu(char a[]){
int length=strlen(a);
unsigned long long sum=0;
for(int i=length-1;i>=0;i--){
int m=1;
for(int j=0;j<length-i-1;j++)
m=m*16;
if(a[i]>='0'&&a[i]<='9')
sum=sum+(a[i]-'0')*m;
if(a[i]>='A'&&a[i]<='F')
sum=sum+(a[i]-'A'+10)*m;
}
return sum;
}
int main(){
long long sum;
int n;
cin>>n;
int ba[1000000]={'\0'};
char a[10][100000]={'\0'};
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++){
cout<<shiliu(a[i]);
int length=0;
for(int j=0;j<1000000;j++){
if(sum>0){
ba[j]=sum%8;
sum=sum/8;
length++;}
else
break;
}
for(int l=length;l>=0;l--)
cout<<ba[l]<<endl;
}
system("pause");
return 0;}
运行结果及报错内容
直接就是按任意键继续
help!!