蓝桥基础训练——十六进制转八进制

** 我的代码出了一些奇怪的问题,本来我用来存储结果的数组逐个输出的话和样例结果是一样的,但是到最后把数组里面的数组合成为一个数时却少了个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;
}
发布了27 篇原创文章 · 获赞 2 · 访问量 680

猜你喜欢

转载自blog.csdn.net/qq_44273739/article/details/102865038