A+B——算法入门(c语言)

34 篇文章 0 订阅
1 篇文章 0 订阅

第一次写博客,就从最简单的开始吧。
大家最开始学习的应该是“Hello World!”吧?嘛,这个其实就是一条输出语句,所以我们直接从a+b开始。

简单A+B

顾名思义,这真的是最简单的a +b算法,直接上代码吧。

#include<stdio.h>
int main()
{
    int a,b;
    while(scanf("%d %d",&a,&b)!=EOF){  //将输入赋值给 a 和 b        
        printf("%d\n",a+b);            //输出 a+b 的结果 
    }
    return 0;
 }

如果 a和b较大,则可以用 long long (%lld)定义,如果还不够用,那么你就应该考虑换一种方式解题了。

复杂A+B

我们以这道题目为原型,此处用到了许多与字符串相关的知识,如整数跟字符串类型的转换,两字符串大小的比较等。

P1601 A+B Problem(高精)

*洛谷

题目背景

题目描述

高精度加法,x相当于a+b problem,[b][color=red]不用考虑负数[/color][/b]

输入输出格式

输入格式:

分两行输入a,b<=10^500

输出格式:

输出只有一行,代表A+B的值

#include<stdio.h>
#include<string.h>
char str1[1002]="",str2[1002]="";   //将两字符串置空(虽然意义不大) 
void reciprocal(char str[])     //将字符串颠倒。例:"12345"变为"54321" 
{
    int len=strlen(str);
    for(int i=0; i<(len+1)/2; i++){   
        char p=str[i];
        str[i]=str[len-i-1];
        str[len-i-1]=p;

    }
}
void add(char str1[], char str2[])
{
    int len1=strlen(str1);
    int len2=strlen(str2);
    int temp,one=0;
    if(strcmp(str1,str2)>=0){   //如果str1比str2大或相等 
        reciprocal(str1);
        reciprocal(str2);
        for(int i=0; i<len2; i++){  //因为str1比str2大,只进行len2位数的操作 
            temp=str1[i]-'0'+str2[i]-'0'+one;   //temp表示两数字在相同位数上的和再加上前一位的进位(one) 
            one=temp/10;
            temp%=10;
            str1[i]=char(temp+'0');     //此处较懒,直接用str1储存最终结果 
        } 
        while(one!=0) { //注意此处还要考虑str1之后位数的进位情况,如:99999 + 11 
            str1[len2]=char(str1[len2++]-'0'+one+'0');
            one=(str1[len2]-'0'+one)/10;
        }   
    }
    else {
        reciprocal(str1);
        reciprocal(str2);
        for(int i=0; i<len1; i++){  //同上 
            temp=str2[i]-'0'+str1[i]-'0'+one;
            one=temp/10;
            temp%=10;
            str1[i]=char(temp+'0');
        }
        for(int i=len1; i<len2; i++){   //与上面while语句功能相似 
            temp=str2[i]-'0'+one;
            one=temp/10;
            temp%=10;
            str1[i]=char(temp+'0');
        }
        if(one!=0) str1[len2]='1';      
    }
    reciprocal(str1);   //将数字换位正常顺序 
}
int main()
{
    scanf("%s",str1);
    scanf("%s",str2);
    add(str1,str2);
    printf("%s\n",str1);        
    return 0;

 } 
  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值