** 我的代码出了一些奇怪的问题,本来我用来存储结果的数组逐个输出的话和样例结果是一样的,但是到最后把数组里面的数组合成为一个数时却少了个1**
这里是代码运行的结果,其中**后面的单个数据是储存结果数组res的值。
我对res数组做了res=res+x[i]*pow(16,length-i-1)操作后,为什么少了一个1???
希望各位大佬帮忙解决!!!
#include<stdio.h>
#include<string.h>
#include<math.h>
int res[100]={0};
int getwei(int x[],int length)
{
int res=0;
int i;
for(i=0;i<length;i++)
{
printf("##%d\n",x[i]);
res=res+x[i]*pow(16,length-i-1);
}
return res;
}
int get_eight(int x)
{
//int t=0;
int i=0,j=0;
int re=0;
int num=0;
while(x>0)
{
res[i]=x%8;
printf("**%d\n",res[i]);
x/=8;
i++;
}
num=i;
for(j=0;j<num;j++)
{
re=re+res[j]*pow(10,j);
}
/*
res[i]=0;
while(res[j]!=0)
{
printf("**%d\n",res[j]);
re=re+res[j]*pow(10,j);
j++;
}
*/
return re;
}
int main()
{
int N=0;
int i=0,j=0,k=0;
char str[100][1000];
int m=0,n=0;
int cnt=0;
int wei_num[100]={0}; //权位积之和
int re=0;
//int flag=0;
//输入部分
scanf("%d",&N);
getchar();
int six[N][100]; //存放十进制的int数据
int eight[N][100];
int length[N]; //长度
for(i=0;i<N;i++)
{
//printf("%d",i);
gets(str[i]);
}
for(j=0;j<N;j++)
{
k=0;
//对str[j]进行处理成int型
while(str[j][k]!='\0')
{
//printf("*\n");
if(str[j][k]>='0' && str[j][k]<='9')
{
//printf("这里");
six[j][k]=str[j][k]-'0';
}
if(str[j][k]>='A' && str[j][k]<='F')
{
//printf("那里");
six[j][k]=str[j][k]-55; //A~B
//printf("**%d**\n",six[j][k]);
//flag++;
}
k++;
}
length[j]=k;
}
//十进制得出权位积之和
for(i=0;i<N;i++)
{
wei_num[i]=getwei(six[i],length[i]);
}
for(i=0;i<N;i++)
{
re=get_eight(wei_num[i]);
printf("%d\n",re);
}
return 0;
}