第一次写博客,就从最简单的开始吧。
大家最开始学习的应该是“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;
}
更多推荐
A+B——算法入门(c语言)
发布评论