4319 | 加法计算器 |
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[102],b[102],c[102],d[102];
int a1[102]={},b1[102]={},c1[102]={},d1[102]={};
cin>>a>>b>>c>>d;
int la=strlen(a);
int lb=strlen(b);
int lc=strlen(c);
int ld=strlen(d);
for(int i=0;i<la;i++) a1[la-1-i]=a[i]-48;
for(int i=0;i<lb;i++) b1[lb-1-i]=b[i]-48;
for(int i=0;i<lc;i++) c1[lc-1-i]=c[i]-48;
for(int i=0;i<ld;i++) d1[ld-1-i]=d[i]-48;
int e1[102]={},x=0;
int t1=la>lb?la:lb;
int t2=lc>ld?lc:ld;
int t3=t1>t2?t1:t2;
for(int i=0;i<t3;i++){
e1[i]=a1[i]+d1[i]+c1[i]+b1[i]+x;
x=e1[i]/10;
e1[i]=e1[i]%10;
}
if(x!=0){
e1[t3]=x;
t3++;
}
for(int i=t3-1;i>=0;i--){
cout<<e1[i];
}
return 0;
}
2827 回文数求和
#include <bits/stdc++.h>
using namespace std;
int main() {
char a1[3000],b1[3000];
int a2[3000]={},b2[3000]={},flag=0;
cin>>a1;
strcpy(b1,a1);
int lena=strlen(a1);
for(int i=0;i<lena;i++){
if(a1[i]!=a1[lena-i-1])flag=1;
}
if(flag==0){
cout<<"YES";
return 0;
}
for(int i=0;i<lena;i++)a2[i]=a1[lena-1-i]-48;
for(int i=0;i<lena;i++)b2[i]=b1[lena-1-i]-48;
for(int i=0;i<lena;i++){
b2[i]+=a2[i];
if(b2[i]>9){
b2[i+1]++;
b2[i]-=10;
}
}
if(b2[lena])lena++;
for(int i=0;i<lena;i++)cout<<b2[lena-i-1];
return 0;
}
4459 大整数加法
#include<bits/stdc++.h>
using namespace std;
void a(){
char a[1001]={},b[1001]={};
int a1[1001]={},b1[1001]={},c[1001]={};
cin>>a>>b;
int la=strlen(a);
int lb=strlen(b);
for(int i=0;i<la;i++){
a1[la-i-1]=a[i]-48;
}
for(int i=0;i<lb;i++){
b1[lb-i-1]=b[i]-48;
}
int lc=max(la,lb);
int x=0;
for(int i=0;i<lc;i++){
c[i]=a1[i]+b1[i]+x;
x=c[i]/10;
c[i]%=10;
}
if(x!=0){
c[lc]=x;
lc++;
}
for(int i=lc-1;i>=0;i--) {
cout<<c[i];
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<=n;i++){
a();
cout<<endl;
}
return 0;
}
4460 两个小数相加
#include <stdio.h>
#include <string.h>
#define N 401
int a[N]={0},b[N]={0},c[N]={0},d[N]={0};
int main()
{
char str1[N],str2[N];
while (scanf("%s %s",str1,str2)!=EOF)
{
int i,j,k;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
int len1=strlen(str1),len2=strlen(str2);
for (i=0;str1[i]!='.'&&i<len1;i++);
k=0;
for (j=i+1;j<len1;j++) //小数从高位到低位
a[k++]=str1[j]-'0';
k=0;
for (j=i-1;j>=0;j--) //整数从低位到高位
b[k++]=str1[j]-'0';
k=0;
for (i=0;str2[i]!='.'&&i<len2;i++);
for (j=i+1;j<len2;j++) //小数从高位到低位
c[k++]=str2[j]-'0';
k=0;
for (j=i-1;j>=0;j--) //整数从低位到高位
d[k++]=str2[j]-'0';
k=0;
for (i=N;i>=0;i--) //小数部分相加
{
a[i]+=c[i];
if (i!=0&&a[i]>9)
{
a[i]%=10;
a[i-1]++;
}
else if (i==0&&a[i]>9)
{
a[i]%=10;
b[0]++;
}
}
for (i=0;i<N;i++) //处理整数部分相加
{
b[i]+=d[i];
if (b[i]>9)
{
b[i]%=10;
b[i+1]++;
}
}
for (i=N;i>=0&&b[i]==0;i--); //输出整数部分
for (j=i;j>=0;j--)
printf("%d",b[j]);
for (i=N;i>=0&&a[i]==0;i--); //输出小数部分
if (i>=0)
{
printf(".");
for (j=0;j<=i;j++)
{
printf("%d",a[j]);
}
}
printf("\n");
}
return 0;
}