kkhll @ 2023-01-06 18:03:55
P1957 口算练习题
#include<stdio.h>
#include<math.h>
#include<string.h>
char str[1000][1000],a[1000],b[1000];
int c[1000][1000];
int main() {
int i,j,k,n,q,m,l,p,x,y;
scanf("%d\n",&n);
for(i=1; i<=n; i++)
{
//scanf("%c",&str[i][0]);
//if(str[i][0]<='9')
for(j=0;j<11;j++)
{
scanf("%c",&str[i][j]);
if(str[i][j]=='\n')
break;
}
}
for(i=1; i<=n; i++) {
q=0;
l=0;
k=0;
while(str[i-q][0]<='9'&&str[i-q][0]>='0') {
q++;
}
m=strlen(str[i]);
if(q==0) {
for(j=2; j<m; j++) {
if(str[i][j]==' ')
break;
a[l]=str[i][j];
l++;
}
for(j+=1; j<m; j++) {
if(str[i][j]=='\n')
break;
b[k]=str[i][j];
k++;
}
} else {
for(j=0; j<m; j++) {
if(str[i][j]==' ')
break;
a[l]=str[i][j];
l++;
}
for(j+=1; j<m&&str[i][j]!='\n'; j++) {
b[k]=str[i][j];
k++;
}
}
p=1;
for(j=l-1;j>=0;j--)
{
c[i][0]+=(a[j]-'0')*p;
p*=10;
}
p=1;
for(j=k-1;j>=0;j--)
{
c[i][1]+=(b[j]-'0')*p;
p*=10;
}
if(str[i-q][0]=='a')
{
c[i][2]=c[i][0]+c[i][1];
x=c[i][2];
c[i][3]=l+k+2;
while(x>0)
{
x/=10;
c[i][3]+=1;
}
printf("%d+%d=%d\n%d\n",c[i][0],c[i][1],c[i][2],c[i][3]);
}
if(str[i-q][0]=='b')
{
c[i][2]=c[i][0]-c[i][1];
if(c[i][2]>=0)
c[i][3]=l+k+2;
else
c[i][3]=l+k+3;
x=abs(c[i][2]);
while(x>0)
{
x/=10;
c[i][3]+=1;
}
printf("%d-%d=%d\n%d\n",c[i][0],c[i][1],c[i][2],c[i][3]);
}
if(str[i-q][0]=='c')
{
c[i][2]=c[i][0]*c[i][1];
x=abs(c[i][2]);
c[i][3]=l+k+2;
while(x>0)
{
x/=10;
c[i][3]+=1;
}
printf("%d*%d=%d\n%d\n",c[i][0],c[i][1],c[i][2],c[i][3]);
}
}
return 0;
}
by _8008008 @ 2023-01-07 09:02:47
末尾有' '
by mooktian @ 2023-01-08 16:21:14
我也是一样的,样例没问题,看测试数据也对,就是0分。
#include<bits/stdc++.h>
using namespace std;
int a,b,c,na,nb,nc;//a,b是要运算的数,c是运算后的结果
//na是a的位数,nb,nc是b和c的位数
int nbits(int n) {
int ans;
if(n<0) ans=1;
else ans=0;
while(n) {
n/=10;
ans++;
}
return ans;
}
int main(){
string s;
char ch;
int p,q;//要运算的数从字符串的p位置开始,q位置结束
int n;
cin>>n;
cin.get();
for(int i=1;i<=n;i++) {
getline(cin,s);
if(s[0]=='a'||s[0]=='b'||s[0]=='c') {ch=s[0];p=2;}
else p=0;
if(ch=='a') ch='+';
if(ch=='b') ch='-';
if(ch=='c') ch='*';
int j=p;//读取a,第一个运算的数
while(s[j]!=' ')
j++;
q=j;
na=q-p;//数字a的位数
for(int k=p;k<q;k++)
a+=(s[k]-'0')*pow(10,q-k-1);
p=q+1;//读取b,第二个运算的数
q=s.size();
nb=q-p;
for(int k=p;k<q;k++)
b+=(s[k]-'0')*pow(10,q-k-1);
switch(ch) {//计算
case '+':
c=a+b;
break;
case '-':
c=a-b;
break;
case '*':
c=a*b;
break;
}
nc=nbits(c);
cout<<a<<ch<<b<<'='<<c<<endl<<na+nb+nc+2;
a=0;b=0;c=0;
}
}
by mooktian @ 2023-01-08 21:00:27
@kkhll 输入方式调整下。