Don’t you know there are languages called Python or Java?
C语言(C班)第二次月考F题题解: (写的有点笨,将就看吧)
#include <stdio.h> int main() { char a[550], b[550], c, *p1, *p2; while(scanf("%s %s",a,b)!=EOF) { int i, l1=0, l2=0; p1=a; p2=b; while(*p1) {p1++; l1++;}//计算数字长度 while(*p2) {p2++; l2++;} for(i=0; i<l1/2; i++) {c=a[i]; a[i]=a[l1-i-1]; a[l1-i-1]=c;}//反转数字,模拟列竖式计算加法 for(i=0; i<l2/2; i++) {c=b[i]; b[i]=b[l2-i-1]; b[l2-i-1]=c;} for(i=l1; i<550; i++) a[i]='0'; for(i=l2; i<550; i++) b[i]='0'; for(i=0; i<540; i++) { a[i]+=b[i]-'0';//相加 a[i+1]+=(a[i]-'0')/10;//进位 a[i]=(a[i]-'0')%10+'0';//保留一位数字 } for(i=540; i>=0; i--) if(a[i]!='0') break;//去除数字前无意义的0 for(; i>=0; i--) printf("%c",a[i]); printf("\n"); } return 0; }
your code is inspiring. it helps me know some of the mistakes that i made.
using namespace std;
int main() { string string1, string2; while(cin >> string1 >> string2){ string string3; int maxlength, minlength; bool oversize = false;
//获得两个数字的长度,并将位数小的数字前面补0 if(string1.length() <= string2.length()){ maxlength = string2.length(); minlength = string1.length(); string1.insert(0, maxlength-minlength, '0'); } else{ minlength = string2.length(); maxlength = string1.length(); string2.insert(0, maxlength-minlength, '0'); } for(int j = maxlength-1; j >= 0 ; j--){ stringstream ss1, ss2, ss3, ss4; int a,b; string c,d; ss1 << string1[j]; ss1 >> a; ss1.clear(); ss2 << string2[j]; ss2 >> b; ss2.clear(); //如果上一位oversize(和大于10),这一次基础数加1 if(oversize){ a += 1; oversize = false; } ss3 << a+b-10; ss3 >> c; ss3.clear(); ss4 << a+b; ss4 >> d; ss4.clear(); //如果和大于10,在结果字符串前插入c=a+b-10,并标记此次oversize if(a + b >= 10){ string3.insert(0, c); oversize = true; }else string3.insert(0, d); //如果最后一次相加还oversize, 在总和前插入1进位 if(oversize && j == 0) string3.insert(0,1,'1'); } cout << string3 << endl;
} return 0;
#include <bits/stdc++.h> using namespace std; int main() { string a, b; while(cin >> a >> b) { a = '0' + a; b = '0' + b; string t; reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); if(a.size() >= b.size()) { for(int i = 0; i < b.size(); i++) { a[i] = a[i] - '0' + b[i]; if(a[i] > '9') { a[i] -= 10; a[i + 1]++; } } t = a; } else { for(int i = 0; i < a.size(); i++) { b[i] = b[i] - '0' + a[i]; if(b[i] > '9') { b[i] -= 10; b[i + 1]++; } } t = b; } for(int i = 0; i < t.size(); i++) { if(t[i] > '9') { t[i] -= 10; t[i + 1]++; } } reverse(t.begin(), t.end()); if(t[0] == '0') t.erase(0, 1); cout << t << endl; } return 0; }
重写基本题
using namespace std; class BigInteger{ private: char str[10050]; int num[10050]={0}; public: BigInteger(){} ~BigInteger(){} BigInteger(char *s){ memset(str,'0',sizeof(str)); memset(num,0,sizeof(num)); int len=0; for(int i=0;;i++){ if(*(s+i)=='\0'){ len=i;break; } } for(int i=0;i<len;i++){ str[i]=*(s+len-i-1); } } int getlen() const{ int len=0; for(int i=0;i<10050;i++){ if(*(str+i)=='0'){ len=i;break; } } return len; } void show() const { int pos=0; for(int i=10050;i>=0;i--){ if(num[i]!=0){ pos=i;break; } } for(int i=pos;i>=0;i--) cout<<num[i]; } BigInteger operator+(const BigInteger &T) const{ BigInteger output; for(int i=0;i<10050;i++){ if(T.str[i]-'0'+str[i]-'0'+output.num[i]<=9){ output.num[i]+=T.str[i]-'0'+str[i]-'0'; } else{ output.num[i]+=T.str[i]-'0'+str[i]-'0'-10; output.num[i+1]++; } } return output; } }; int main() { char s1[10050],s2[10050]; while(cin>>s1>>s2) { cin.get(); BigInteger A(s1),B(s2),C; C=A+B; C.show(); cout<<endl; } }
#include <iostream> #include <algorithm> #include <string> #include <array> #define MAX_LEN 500 using namespace std; void stringToint(const string &str, array<int,MAX_LEN> &arr, string::size_type length) { auto arr_idx = length - 1; for (auto i = 0; i < length; ++i) { arr[arr_idx] = str[i] - '0'; --arr_idx; } } int main() { string a, b; while (cin >> a >> b) { array<int, MAX_LEN> c{}, d{}, e{}; stringToint(a, c, a.size()); stringToint(b, d, b.size()); bool carry = false; auto upper = max(a.size(), b.size()); for (auto i = 0; i < upper; ++i) { e[i] += c[i] + d[i]; if (e[i] >= 10) { if (i == upper - 1) carry = true; ++e[i + 1]; e[i] %= 10; } } if (carry) cout << "1"; auto iter = e.begin(); advance(iter, upper - 1); while (true) { cout << *iter; if (iter == e.begin()) break; --iter; } cout << endl; } return 0; }
刚用python while True: try: a,b=map(int,input().split()) print(a+b) except: break
void plus_all(string,string,int); int gain(void);
int main(void) { gain();
return 0;
}
int gain(void) {
string x,y; int bits_x,bits_y; if (cin >> x >> y) { bits_x = x.size(); //x的位数,-2是字符串末尾的"\0"?? bits_y = y.size(); //y的位数 if (bits_y > bits_x) { while (bits_x < bits_y){ x = "0"+ x; bits_x++; } } else if (bits_x > bits_y) { while (bits_x > bits_y){ y = "0"+ y; bits_y++; } } else {} plus_all(x,y,bits_x); //计算x,y的和并输出 gain(); //判断是否还有输入 } //获得2个位数相同的字符串 return 0;
void plus_all(string x,string y,int bits_x) { string res = “”; int i,num; int extra = 0; for (i=bits_x; i>=1; i–) {
num = int(x[i-1]) + int(y[i-1]) - 48 + extra; if (num > 57 ){ extra = 1; res = char(num - 10) + res; } else { extra = 0; res = char(num) + res; } } cout << res << endl;
} 为啥不对= =。。。
int main() { char x[100000],y[100000]; int a,b,c,i,j; while((scanf(“%s%s”,x,y))!=EOF) { int sum[100000]={0}; a=strlen(x); b=strlen(y); if(a>b) { for(i=0;i=0;i–,j–) { sum[j]=x[j]+y[i]-‘0’-‘0’; } for(i=a-1;i>=1;i–) if(sum[i]>=10) {sum[i-1]++;sum[i]-=10;} for(i=0;i=0;i--,j--) { sum[j]=x[i]+y[j]-'0'-'0'; } for(i=b-1;i>=1;i--) if(sum[i]>=10) {sum[i-1]++;sum[i]-=10;} for(i=0;i<b;i++) printf(“%d”,sum[i]);
} if(a==b) { for(i=b-1;i>=0;i--) { sum[i]=sum[i]+x[i]+y[i]-'0'-'0'; if(sum[i]>=10&&i!=0) {sum[i-1]++;sum[i]-=10;} } for(i=0;i<a;i++) printf("%d",sum[i]);
} printf(“\n”); }}
int main() { int a[510]={0},b[510]={0},i,j,d,e,t,l; char c[510],f[510]; while(scanf(“%s %s”,c,f)!=EOF) { i=0;j=0; i=strlen(c); j=strlen(f); if(i>=j) { for(l=0;l<i;l++) { a[l+1]=c[l]-‘0’; } for(l=0;l<j;l++) { b[l+1]=f[l]-‘0’; } } else { for(l=0;l<j;l++) { a[l+1]=f[l]-‘0’; } for(l=0;l=1;j–) { a[i]=a[i]+b[j]+d; d=a[i]/10; a[i]=a[i]%10; i–; } while(d==1) { d=(a[i]+d)/10; a[i]=(a[i]+d)%10; i–; } if(a[0]==1) printf(“1”); for(i=1;i<=e;i++) printf(“%d”,a[i]); printf(“\n”); } return 0; }
Don’t you know there are languages called Python or Java?
C语言(C班)第二次月考F题题解:
(写的有点笨,将就看吧)
your code is inspiring. it helps me know some of the mistakes that i made.
include
include
include
using namespace std;
int main()
{
string string1, string2;
while(cin >> string1 >> string2){
string string3;
int maxlength, minlength;
bool oversize = false;
}
return 0;
重写基本题
include
刚用python
while True:
try:
a,b=map(int,input().split())
print(a+b)
except:
break
include
include
using namespace std;
void plus_all(string,string,int);
int gain(void);
int main(void) {
gain();
}
int gain(void) {
}
void plus_all(string x,string y,int bits_x) {
string res = “”;
int i,num;
int extra = 0;
for (i=bits_x; i>=1; i–) {
}
为啥不对= =。。。
include
include
int main()
{
char x[100000],y[100000];
int a,b,c,i,j;
while((scanf(“%s%s”,x,y))!=EOF)
{
int sum[100000]={0};
a=strlen(x);
b=strlen(y);
if(a>b)
{ for(i=0;i=0;i–,j–)
{
sum[j]=x[j]+y[i]-‘0’-‘0’;
}
for(i=a-1;i>=1;i–)
if(sum[i]>=10) {sum[i-1]++;sum[i]-=10;}
for(i=0;i=0;i--,j--) { sum[j]=x[i]+y[j]-'0'-'0'; } for(i=b-1;i>=1;i--) if(sum[i]>=10) {sum[i-1]++;sum[i]-=10;}
for(i=0;i<b;i++)
printf(“%d”,sum[i]);
}
printf(“\n”);
}}
include
include
int main()
{
int a[510]={0},b[510]={0},i,j,d,e,t,l;
char c[510],f[510];
while(scanf(“%s %s”,c,f)!=EOF)
{
i=0;j=0;
i=strlen(c);
j=strlen(f);
if(i>=j)
{
for(l=0;l<i;l++)
{
a[l+1]=c[l]-‘0’;
}
for(l=0;l<j;l++)
{
b[l+1]=f[l]-‘0’;
}
}
else
{
for(l=0;l<j;l++)
{
a[l+1]=f[l]-‘0’;
}
for(l=0;l=1;j–)
{
a[i]=a[i]+b[j]+d;
d=a[i]/10;
a[i]=a[i]%10;
i–;
}
while(d==1)
{
d=(a[i]+d)/10;
a[i]=(a[i]+d)%10;
i–;
}
if(a[0]==1)
printf(“1”);
for(i=1;i<=e;i++)
printf(“%d”,a[i]);
printf(“\n”);
}
return 0;
}