WDL6022
zgxwdl
2021-01-15 17:18

C语言进制转换输出超限问题

  • c语言

题目链接

http://codeup.cn/contest.php?cid=100000579

(是问题B)

题目描述如下

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

输出

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

样例输入 Copy

4 123 10

样例输出 Copy

27

我的代码如下

#include<stdio.h>
#define N 100000
long long int ConvertToDecimal(int a,long long int n){
	long long int res=0;
	int p=1;
	while(n!=0){
		res+=n%10*p;
		n=n/10;
		p=p*a;
	}
	return res;
}
int main(){
	int a,b;
	long long int n,res;
	char str[N];
	while(scanf("%d %lld %d",&a,&n,&b)!=EOF){
		int i;
		res=ConvertToDecimal(a,n);
		for(i=0;res!=0;i++){
			str[i]=res%b;
			res/=b;
		}
		for(int j=i-1;i!=0 && j>=0;j--){
			if(str[j]<10) printf("%d",str[j]);
			else printf("%c",str[j]+55);
		}
		if(i==0) printf("0");
		printf("\n");
	}
	return 0;
}

结果是输出超限50

第一次遇到这种错误,而且不知道自己错在哪了(调试很多情况也没发现错误点),求大佬指点迷津

而且题目说n是一个整数,又说给出的数不超过long int范围,所以给出的n应该就是个十进制表示的整数,应该是暗示用long long int 接收就可以,所以错误点应该也不是在这里。

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

4条回答