CSDN每日一练非负整数求和 C语言

题目名称:非负整数求和
时间限制:1000ms 内存限制:256M

题目描述:

给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和。 注意: - num1 和 num2 的长度都小于 5100. -
num1 和 num2 都只包含数字 0-9. - num1 和 num2 都不包含任何前导零。 - 你不能使用任何內建
BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

输入描述:

输入整数num1,num2。(0<=num1,num2<=1e100)

输出描述:

输出整数num1,num2的加和。

示例:
输入:

234 222

输出:

456

思路:由于这个数可能超级大,我们就不能用简单的相加来解决了,因此我考虑每个位都占一列,存储在一个超大的数组里,然后取出来逐步相加,得到最终结果。
所需关键变量:

num1[5105]用来存储第一个加数

num1[5105]用来存储第二个加数

sum[5105]用来存储最终结果

只要我们发现该位两数相加大于或等于10,我们就向前进一,然后把对十求余所得到的数赋值给该位。
该算法本人认为比较优,如果有更好的想法,欢迎q我!
代码如下(编译器是dev,语言是C语言):

#include <stdio.h>
#include<stdbool.h>
int control = 0,num1jishu = 1,num2jishu = 1,i,j;
char temp;
int num1[5105] = {0},num2[5105] = {0},sum[5105] = {0};
int main(){
    while(true){
        scanf("%c",&temp);
        if(temp == '\n'){
            break;
        }
        if(temp == ' '){
            control = 1;
            continue;
        }
        if(control == 0){
            num1[num1jishu++] = temp - 48;
        }else{
            num2[num2jishu++] = temp - 48;
        }
    }
    i = --num1jishu;
    j = --num2jishu;
    if(i>=j){
        for(;i>0;i--){
        	if(j == 0){
            	sum[i] = sum[i] + num1[i];
        	}else{
            	sum[i] = sum[i] + num1[i] +num2[j--];
            	if(sum[i]>=10){
                	sum[i-1] += 1;
                	sum[i] = sum[i]%10;
            	}
        	}
    	}
        for(i = 0;i<=num1jishu;i++){
            if((i == 0)&&(sum[i] == 0)){
                continue;
            }
            printf("%d",sum[i]);
        }
    }else{
        for(;j>0;j--){
        	if(i == 0){
            	sum[j] = sum[j] + num2[j];
        	}else{
            	sum[j] = sum[j] + num1[i--] +num2[j];
            	if(sum[j]>=10){
                	sum[j-1] += 1;
                	sum[j] = sum[j]%10;
            	}
        	}
    	}
        for(i = 0;i<=num2jishu;i++){
            if((i == 0)&&(sum[i] == 0)){
                continue;
            }
            printf("%d",sum[i]);
        }
    }
    return 0;
}

结果如下:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
影分身是一种在忍者世界中常见的特殊技能,也是《火影忍者》中的一个重要元素。每个人都可以通过影分身术创造出许多个分身,这些分身可以同时进行各种活动。类比于影分身术,CSDN每日一练就像是一个模拟的技能训练场。每天CSDN都会发布一道题目供广大程序员参与练习。 参与影分身CSND每日一练的好处有许多。首先,通过每日一练,程序员们可以不断提高自己的编程能力。就像影分身可以通过快速反应和高效操作来增强自己的实力一样,参与每日一练可以锻炼程序员的编程思维和解决问题的能力。 其次,每日一练还可以丰富程序员的知识储备。每道题目都是经过精心挑选和设计的,涵盖了各种常见的编程知识点和技巧。通过解答这些问题,程序员们能够接触到各种新的问题和方法,扩展自己的知识领域。 另外,参与每日一练还可以增强程序员的交流与学习能力。在每道题目下方,CSDN提供了评论区供程序员们交流和讨论。程序员们可以在这里分享自己的解题思路和方法,互相学习和进步。这不仅能够提高解题能力,还能够拓宽视野,了解不同的编程思维和技术。 综上所述,影分身CSND每日一练就像是一个虚拟的技能训练场,可以帮助程序员们不断提升自己的编程能力,丰富知识储备,增强交流与学习能力。参与其中,每个程序员都能像影分身一样变得更加强大。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值