每日一题--有进位的加法运算
目录
【题目描述】
营业额我叫王大锤,昨天还是一名C++老师。万万没想到,我又失业了。昨天上课前我写的程序让整个学校的电脑中了病毒。为了生计,无可奈何,在学校旁边的唐师傅理发店找了一份兼职。
唐师傅理发店已经开张十年有余,生意红火。唐币是一种专门用来唐师傅营业额的,用int以至于long long int已经无法表示唐师傅的总营业额了。而唐师傅又想要计算自开业以来的总营业额。他给了我两个账本和我的第一个任务,能不能获得这份工作,在此一举!
每个账本都已经在最后一页写上了这一时期的总营业额,设计一个程序,计算出它们的和。
【输入】
共2行,每行1个正整数(不超过100位),分别表示每个账本上写着的总营业额(单位:唐币)。
【输出】
一行,包含一个整数,表示总的营业额。
For example:
Input
Result
1
9
10
答案
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int a[110]={0},b[110]={0},c[110]={0};
int i,j,lent,lens,len;
char s[110],t[110];
cin >> s >> t;
lens = strlen(s);
lent = strlen(t);
len = max(lens,lent);
for(i=lens-1,j=0;i>=0;i--,j++) //将s逆序存储到整型组a中
{
a[j] = s[i] - '0';
}
for(i=lent-1,j=0;i>=0;i--,j++) //将s逆序存储到整型组a中
{
b[j] = t[i] - '0';
}
for(i=0;i<len;i++) //进位运算
{
c[i] = c[i] + a[i] + b[i];
if(c[i] > 9)
{
c[i+1]++;
c[i] = c[i] % 10;
}
}
if(c[len]!=0) //判断最高位是否进位,即计算结果数据长度是否加1
{
len++;
}
for(i=len-1;i>=0;i--) //逆序输出
{
cout << c[i];
}
cout << endl;
return 0;
}
- q1为什么要倒序相加?
因为两个相加的数字的位数可能不同,倒序之后可以对齐
- q2为什么我看不懂一些参数的数值控制,比如len-1…
因为数组是从0开始的,a[0]是第一位,看不懂就自己拿笔写一遍