zoukankan      html  css  js  c++  java
  • 一本通1168 高精度加法

    【题目描述】

    求两个不超过200位的非负整数的和。

    【输入】

    有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

    【输出】

    一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

    【输入样例】

    22222222222222222222
    33333333333333333333
    

    【输出样例】

    55555555555555555555


    代码:

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib> using namespace std; int main() { char a1[210],b1[210]; int a[210],b[210],c[210],lena,lenb,lenc,i,x; memset(a,0,sizeof(a));//数组清零,相当于a[210]={0} memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); gets(a1);读入两个数用字符的形式,因为200位数已经远远超过了long long gets(b1); lena=strlen(a1);//字符串长度用变量表示 lenb=strlen(b1); for(i=0;i<=lena-1;i++) { a[lena-i]=a1[i]-48;//数字的阿斯克码值减去48就是数字本身的值,所以此处是字符变成数字,每一个数字用一维数组来存放。而倒序存放也是为了方便进位,乘法同理 } for(i=0;i<=lenb-1;i++) { b[lenb-i]=b1[i]-48; } lenc=1; x=0;//x表示向上一位进的数,一开始初始化为0 while(lenc<=lena||lenc<=lenb)//两个正整数做加法,结果肯定不会小于任何一个加数 { c[lenc]=a[lenc]+b[lenc]+x;位数一一对应别忘了加上x x=c[lenc]/10;//除以10看看是否进位 c[lenc]%=10;//留下小于10的数 lenc++;//计算下一位 } c[lenc]=x;//最后一位只有x while(c[lenc]==0)如果后面有0.则删掉 lenc--; for(int i=lenc;i>=1;i--) { cout<<c[i];//因为开始倒序输入,所以输出时反过来,就又是正序了 } return 0; }
  • 相关阅读:
    Win32串口API
    Windows核心编程 第4章 进程
    大家都来吐槽下12306的网站bug吧
    HttpRequest模拟Post和Get提交代码
    jquery.masonry + jquery.infinitescroll 实现瀑布流布局
    三层架构之泛型应用
    listView 中,大图标时,各个图标之间间距的控制
    Windows Phone APP的设计过程
    分享三个小故事
    最值得创业者聆听的10大TED演讲(中文字幕视频)
  • 原文地址:https://www.cnblogs.com/57xmz/p/12370695.html
Copyright © 2011-2022 走看看