C
A+B
该题为高精度运算以到模板题,运用模板,即利用字符数组存储每一位数,闯将另一数组储存每一位数,然后进行加运算。
#include<stdio.h>
#include<string.h>
#define maxn 1010
int an1[maxn];
int an2[maxn];
char s1[maxn+10];
char s2[maxn+10];
int main()
{
int t;
scanf("%d",&t);
int time =1;
int o=t;
while(t--)
{
scanf("%s",s1);
scanf("%s",s2);
int i,j;
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
int n1=strlen(s1);
for(j=0,i=n1-1;i>=0;i--)
an1[j++]=s1[i]-'0';
int n2=strlen(s2);
for(j=0,i=n2-1;i>=0;i--)
an2[j++]=s2[i]-'0';
for(i=0;i<maxn;i++)
{
an1[i]+=an2[i];//逐位相加
if(an1[i]>=10)//看是否要进位
{
an1[i]-=10;
an1[i+1]++;//进位
}
}
printf("Case %d:\n",time);
time++;
printf("%s + %s = ",s1,s2);
for(i=maxn;(i>=0)&&(an1[i]==0);i--);
if(i>=0)
for(;i>=0;i--)
printf("%d",an1[i]);
else
printf("0");
printf("\n");
if(time!=o+1)
printf("\n");
}
return 0;
}
F
大整数减法
该题同样是模板题,利用和上题同一思想进行减运算,需要注意的是进行借位
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
/**#define PI acos(-1.0)
#define EPS 1e-8
#define MOD 1e9+7
#define LL long long*/
#define maxn 250
int c[maxn];
int num;
int main()
{
char A[maxn];
char B[maxn];
scanf("%s%s",&A,&B);
if(strlen(A)<strlen(B)||(strlen(A)==strlen(B)&&strcmp(A,B)<0))
{
swap(A,B);//交换
printf("-");
}
int a[maxn],b[maxn];
int lena=strlen(A);//表示a的长度
int lenb=strlen(B);//表示b的长度
for(int i=0;i<lena;++i)
a[i]=A[lena-i-1]-'0';
for(int i=0;i<lenb;++i)
b[i]=B[lenb-i-1]-'0';
num=0;//初始c的位数
for(int i=0, g=0;i<max(lena,lenb);++i)//g借位是用
{
int temp=a[i]-g;
if(i<lenb)
temp-=b[i];
if(temp>=0)
g=0;
else
{
g=1;
temp+=10;
}
c[num++]=temp;
}
num=num-1;
while(!c[num]&&(num>=1))
--num;
for(int i=num;i>=0;--i)
printf("%d",c[i]);
return 0;
}
版权声明:本文为taoshisan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。