lg1601高精度加法(同xoj)

题目

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
using namespace std;

string add(string a,string b)
{
    string flag;//和的字符串保存在flag里面
    int lena=0,lenb=0;//lena为字符串a的长度,lenb为字符串b的长度
    int x=0,y=0,i;//x为字符串a每一位的字符转成整型后的数,
    int temp=0,count=0;//count为进位,temp为加后数字的个位数
    lena=a.length();//取字符串的长度
    lenb=b.length();
    if(lena>lenb)//a的长度长,在b前面补上0
    {
        for(i=1;i<=lena-lenb;i++)//补上lena-lenb个0
        {
            b="0"+b;//注意这个“0”+b的位置(不能交换)。这里的+相当于字符串的连接
        }
    }
    else//在a的前面补0
    {
        for(i=1;i<=lenb-lena;i++)
        {
            a="0"+a;
        }
    }
    lena=a.length();
    for(i=lena-1;i>=0;i--)//遍历字符串,为了做加法
    {
        x=a[i]-'0';
        y=b[i]-'0';
        temp=x+y+count;
        count=temp/10;//进位
        temp=temp%10;//做过加法后的个位数
        flag=(char)(temp+'0')+flag;//把个位数的整形转换为字符型
    }
    if(count!=0)//存在进位(这里终于懂了)
    {
        flag=(char)(count+48)+flag;
    }
    return flag;//返回加后的字符串
}

int main()
{
    string a,b,c;
    cin>>a>>b;
    c=add(a,b);
    cout<<c<<endl;
    //printf("%s",c);这个输出是错的
    return 0;
}

备注:

l  定义三个字符串,一个用来存加数a,一个存加数b,另一个存结果c

l  字符串的输入和输出都用C++

l  定义字符串:string
a;

l  取字符串的长度:len=a.length();

l  进位count:temp/10    相加后的个位数:temp=temp%10;

l  这道题目又用到了字符串中的+:在金福传中a+b相当于把字符串a和b连接起来(注意a和b的位置),a+b与b+a是有区别的。

l  str1=“0”+str1;就是在字符串str1的前面补0

l  把整型变成字符型:+‘0’  把字符型变成整型:-‘0’

l  做高精度加法的时候,在较短的那个加数前添上0,补成一样长,方便计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值