j解决D进制的A+B遇到的问题

代码有一个样例没过,实在找不出来。请大家把帮忙看看

img

代码


#include<stdio.h>
#include<math.h>

void nun(int x,int d){
    if(x==0)return ;
    if(x==1){
    printf("%d",x);
    return ;
    }
    else{
        nun (x/d,d);
        printf("%d",x%d);
    }
}
int main()
{
    int a,b,d;
    scanf("%d %d %d",&a,&b,&d);
    nun(a+b,d);

    return 0;
}

源于chatGPT仅供参考

根据你提供的代码,我注意到可能会导致样例未通过的问题。在 `nun()` 函数中,在调用递归之前应该先判断 `x` 是否为零,因为当 `x` 为零时,不需要再进行递归和打印。以下是修正后的代码:

```c
#include <stdio.h>
#include <math.h>

void nun(int x, int d) {
    if (x == 0) {
        return;
    }
    if (x == 1) {
        printf("%d", x);
        return;
    } else {
        nun(x / d, d);
        printf("%d", x % d);
    }
}

int main() {
    int a, b, d;
    scanf("%d %d %d", &a, &b, &d);
    int sum = a + b;
    if (sum == 0) {
        printf("0");  // 处理特殊情况:和为0时直接输出0
    } else {
        nun(sum, d);
    }

    return 0;
}

这段代码将和 a+b 存储在变量 sum 中,并添加了一个条件来处理特殊情况:如果和为0,则直接输出0。这样可以确保程序正确处理输入为0的情况。

希望这能帮助你解决问题。如果还有其他疑问,请随时提出。

```

改这样试试,供参考:

#include<stdio.h>
void nun(int x, int d) {
    if (x == 0) 
        return;
    nun(x / d, d);
    if (x % d < 10)
        printf("%d", x % d);
    else
        printf("%c", 55 + x % d); 
}
int main()
{
    int a, b, d;
    scanf("%d %d %d", &a, &b, &d);
    nun(a + b, d);

    return 0;
}
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7518602
  • 这篇博客也不错, 你可以看下算法笔记:(黑盒测似)关于a+b的几种输入输出形式
  • 除此之外, 这篇博客: 算法笔记 5.6 大整数运算 大整数的加减乘除中的 a+b实例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<iostream>	
    #include<cstring>	 
    using namespace std;
    
    const int N=1000;
    char str[N];
    
    //大整数数据结构
    struct bign
    {
    	int d[N];//长度最大为1000
    	int len;
    	//构造函数初始化
    	bign(){
    		memset(d,0,sizeof(d));
    		len=0;
    	}
    };
    
    //字符串转大整数 逆序转
    bign change(char str[]){
    	bign a;
    	a.len=strlen(str);
    	for(int i=0;i<a.len;i++){
    		a.d[i]=str[a.len-i-1]-'0';
    	}
    	return a;
    }
    
    //比较两个大整数的大小 a>b 1; a<b -1; a==b 0
    int compare(bign a,bign b){
    	if(a.len>b.len) return 1;
    	else if(a.len<b.len) return -1;
    	else{
    		for(int i=a.len-1;i>=0;i--){
    			if(a.d[i]>b.d[i]) return 1;
    			else if(a.d[i]<b.d[i]) return -1;
    		}
    		return 0;//相等
    	}
    }
    
    //大整数输出
    void print(bign a){
    	for(int i=a.len-1;i>=0;i--){
    		printf("%d", a.d[i]);
    	}
    	printf("\n");
    }
    
    //大整数加法  核心简洁代码
    bign add(bign a,bign b){
    	bign c;
    	int carry=0;//进位
    	for(int i=0;i<a.len||i<b.len;i++){//以较长为为上限 超过最高位的都在构造函数里初始化为0了
    		int temp=a.d[i]+b.d[i]+carry;
    		carry=temp/10;
    		c.d[c.len++]=temp%10;//c有个初始长度0了
    	}
    	if(carry!=0) c.d[c.len++]=carry;//最终进位不为0 结果直接给最高位
    	return c;
    }
    
    int main(){
    	char str1[N],str2[N];
    	scanf("%s%s",str1,str2);
    	bign a=change(str1);
    	bign b=change(str2);
    	print(add(a,b));
    	return 0;
    }