数字杭电
杭电1002题,大数加法典型问题,这道题怎么说呢,说难不难,但要注意一些细节。
先说一下解大数加法解题的思路,给你两个超长的数,首先,你可以用两个字符串a,b来保存,计算字符串的长度,然后将字符串中的每个字符转化为数字逆序保存到int型数组c,d中,然后两数组相加保存到一个新数组e中即可,进位的话就e[i+1]++即可。
举个例子:
比如算789 + 456.首先用两个字符串a,b分别保存好。然后计算他们的长度len1,len2,接着建立两个int型数组c,d长度分别为len1,len2即可。因为加法要从个位开始,为了方便计算我们需要将每个字符逆序保存到c,d中,即c[0]=9,c[1]=8,c[2]=7, d[0]=6,d[1]=5,d[2]=4. 然后将两数组相加保存到一个新数组e中,
e数组要先初始化为0(这点很重要!!!!).
e数组长度可以设置为len( len=max(len1,len2)+1 ),len=4, 这样我们就可以开始加了,e[0]=c[0]+d[0]=15大于10了,我们让e[0]对10取模即可,即e[0]%=10,这样e[0]=5, 有进位,因为e数组已经初始化为0,那么e[0+1]++即可,即e[1]变成1了,如果是第i个数,e[i+1]++即可。e[1]=(e[1]+c[1]+d[1])%10即 e[1]=(1+8+5)%10=4, 依此类推e[2]=2, e[3]=1,逆序输出e数组即得到我们的结果1245.
博主刚开始只把核心算法写了,然后一提交就ERROR,我心想,我核心算法应该对啊,怎么老error呢,error几次以后发现是没有把字符串逆序保存到c,d数组中导致的。本以为到这就完事了,改完程序后一提交,神马!?presentation error,好吧,我要哭了有木有, 难受wuwuwu......
又仔细看了一下输出格式要求,发现我多输出了一个回车,改完后终于ac。瞬间很兴奋有木有~~~~~~~
嗯,就写到这吧,最后代码如下:
觉得有用记得顶一下哦~~~
#include <iOStream>
#include <string.h>
#define N 1010
using namespace std;
void print(int a[], int len)
{
//判断a[len]是否为0,为0表示两数相加不进位,不为0则表示进位了
if(a[len])
{
for(int i=len; i>=0; i--)//不进位
cout<<a[i];
}
else
{
for(int i=len-1; i>=0; i--)//进位
cout<<a[i];
}
cout<<endl;
}
int main()
{
int T=0;
cin>>T;
int countt=0;//计数器,每输出一次加1
while(T--)
{
string a,b;
int c[N],d[N],e[N];
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
memset(e,0,sizeof(e));//此处e数组必须初始化为0
cin>>a>>b;
int len1=a.length(),len2=b.length();
int len=max(len1,len2);//用len保存len1 len2中较长的那个
for(int i=len1-1,j=0; i>=0; i--,j++)//将字符串a转化为数字并逆序保存到c数组中
{
c[j]=a[i]-'0';
}
for(int i=len2-1,j=0; i>=0; i--,j++)//将字符串b转化为数字并逆序保存到d数组中
{
d[j]=b[i]-'0';
}
for(int i=0; i<len+1; i++)
//c,d两数组相加保存到e中,e的长度应该是小于等于a,b字符串中较长的那个+1的,即len+1
{
e[i]=e[i]+c[i]+d[i];//e数组初始化为0方便此处相加哦QAQ,我就是在这错了,刚开始没加e[i]
if(e[i]>9)
{
e[i]%=10;
e[i+1]++;
}
}
//输出格式问题,该加的空格要加上不该加的回车不要加,否则会出现presentation错误
cout<<"Case "<<++countt<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
print(e,len);//逆序输出e数组
if(T>0)//判断是否需要多加空行
cout<<endl;
}
return 0;
}
相关阅读
File file=new File("hello.txt"); if(file.exists()){ System.out.println("exit"); System.out.println(); try {
面试题>>C 语言 1.请写出 : bool, float, *p 与零值比较的 if 语句bool flag : if(flag) if(!flag) float x : const float EXP
gearman manager安装的时候由于官方文档不太全,转了几大圈才搞定现在记录下来安装前需要php安装pecntlphp -m|grep pcntl 命令
今天小编给大家带来的是“宝贝标题最好多少分”这一问题的相关解析。现在在淘宝开店的店主越来越多,宝贝标题评分也成为一个宝贝好
一、问题 数据分析的两层模型中,第一层就是对分析对象做细分,然后第二层看指标异动。 针对用户的分析中,最常见的细分方式是做“新客