c语言1000以内正整数求和,用c语言编程完成两个1000位以内的正整数的加法运算是c语言!我找到了一段代码 能正确执行出来 但不是很能看懂 #include#include#include#incl...

7d14a2b81882cfe4494b096a84150b2a.png 优质解答

#include 

#include 

#include 

int main() {

int i,j,k,T,carry;

int lena,lenb,num;

char ch,c[1000] = {0};

char a[1000],b[1000];

scanf("%d",&T);

while(T > 0) {

i = 0;

printf("\na[] = ");

while(1) { // 读取a[],'\n'结束读入过程

fflush(stdin);

ch = _getch();

if(ch == '\r') break;

if(ch >= '0' && ch <= '9') {

a[i++] = ch;

printf("%c",ch);

}

}

a[i] = '\0';

printf("\nb[] = ");

i = 0;

while(1) { // 读取b[],'\n'结束读入过程

fflush(stdin);

ch = _getch();

if(ch == '\r') break;

if(ch >= '0' && ch <= '9') {

b[i++] = ch;

printf("%c",ch);

}

}

b[i] = '\0';

lena = strlen(a);

lenb = strlen(b);

carry = 0; // 进位

k = 0;

// 从个位开始加,逆向存储相加结果

for(i = lena - 1,j = lenb - 1; i >= 0 && j >= 0; --i,--j) {

num = a[i] + b[j] - '0' - '0' + carry; // 求得该位的和

c[k++] = num % 10 + '0'; // 获取该位数字

carry = num / 10; // 获取进位

}

while(i >= 0) { // 处理更长的数

num = a[i--] + carry - '0';

c[k++] = num % 10 + '0';

carry = num / 10;

}

while(j >= 0) { // 处理更长的数

num = a[j--] + carry - '0';

c[k++] = num % 10 + '0';

carry = num / 10;

}

if(carry) c[k++] = carry + '0';

c[k] = '\0';

for(i = 0;i 

ch = c[i];

c[i] = c[k - 1 - i];

c[k - 1 - i] = ch;

}

printf("\n%s + %s = %s\n",a,b,c);

--T;

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
思路: 1. 读入两个超长正整数,可以使用字符串读入,将字符串转换为数数组。 2. 对两个数数组进行加法运算,从低到高依次相加,每一的和取模10得到该的结果,进则在下一加上1。 3. 将相加后的结果转换为字符串输出。 代码实现: ```c #include <stdio.h> #include <string.h> #define MAX_LEN 1000 // 定义最大长度 int main() { char str1[MAX_LEN + 1], str2[MAX_LEN + 1]; // 定义字符数组 int num1[MAX_LEN + 1], num2[MAX_LEN + 1], result[MAX_LEN + 1]; // 定义数数组 int len1, len2, len, carry = 0; // len1和len2分别为两个数的长度,len为相加后的长度,carry为进数 int i, j; // 循环计数器 // 读入两个超长正整数 printf("请输入第一个数:"); scanf("%s", str1); printf("请输入第二个数:"); scanf("%s", str2); len1 = strlen(str1); len2 = strlen(str2); // 将字符数组转换为数数组 for (i = 0; i < len1; i++) { num1[i] = str1[len1 - i - 1] - '0'; } for (i = 0; i < len2; i++) { num2[i] = str2[len2 - i - 1] - '0'; } // 对两个数数组进行加法运算 len = len1 > len2 ? len1 : len2; // 取两个数中较大的长度 for (i = 0; i < len; i++) { result[i] = num1[i] + num2[i] + carry; // 相加并加上进 carry = result[i] / 10; // 计算 result[i] %= 10; // 取模得到该的结果 } if (carry > 0) { // 如果最高有进 result[len++] = carry; // 将进加到最高 } // 将数数组转换为字符串 printf("两数之和为:"); for (i = len - 1; i >= 0; i--) { printf("%d", result[i]); } printf("\n"); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值