博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPOJ Problem 6:Simple Arithmetics
阅读量:6090 次
发布时间:2019-06-20

本文共 3277 字,大约阅读时间需要 10 分钟。

题目大意:给出一个有+、-、*的正整数式子,采用竖式计算并输出答案,答案必定为正数。

高精度问题,有点麻烦,而且格式有很多要注意的。具体可以看

的,而且下面有输入输出的测试数据。

我的代码在下面:

#include
#include
#define max(a,b)a>b?a:bchar s[1005],r;int a[505],b[505],c[505],d[505][1005];int i,j,k,l,n;void decr(){ int p,q; c[0]=a[0]; for (i=1;i<=a[0];i++){ c[i]=c[i]+a[i]-b[i]; if (c[i]<0){c[i]+=10;c[i+1]--;} } while(c[0]>1&&c[c[0]]==0)c[0]--; p=max(b[0]+1,a[0]); q=max(b[0]+1,c[0]); for (i=1;i<=p-a[0];i++)printf(" "); for (i=a[0];i;i--)printf("%d",a[i]);printf("\n"); for (i=1;i<=p-b[0]-1;i++)printf(" "); printf("-"); for (i=b[0];i;i--)printf("%d",b[i]);printf("\n"); for (i=1;i<=p-q;i++)printf(" "); for (i=q;i;i--)printf("-");printf("\n"); for (i=1;i<=p-c[0];i++)printf(" "); for (i=c[0];i;i--)printf("%d",c[i]);printf("\n");}void incr(){ int p,i; c[0]=max(a[0],b[0]); for (i=1;i<=c[0];i++){ c[i]=a[i]+b[i]; if (i>1){ c[i]+=c[i-1]/10; c[i-1]%=10; } } if (c[c[0]]>9){c[c[0]]%=10;c[++c[0]]=1;} p=max(a[0],b[0]+1); if (c[0]>p)p=c[0]; for (i=1;i<=p-a[0];i++)printf(" "); for (i=a[0];i;i--)printf("%d",a[i]);printf("\n"); for (i=1;i<=p-b[0]-1;i++)printf(" "); printf("+"); for (i=b[0];i;i--)printf("%d",b[i]);printf("\n"); for (i=p;i;i--)printf("-");printf("\n"); for (i=1;i<=p-c[0];i++)printf(" "); for (i=c[0];i;i--)printf("%d",c[i]);printf("\n");}void mult(){ int p,q,s; memset(d,0,sizeof(d)); d[0][0]=a[0]+b[0]-1; for (i=1;i<=b[0];i++){ d[i][0]=a[0]; for (j=1;j<=a[0];j++){ d[i][j]=b[i]*a[j]; d[0][i+j-1]=d[0][i+j-1]+b[i]*a[j]; if (i+j>2){ d[0][i+j-1]+=d[0][i+j-2]/10; d[0][i+j-2]%=10; } if (j>1){ d[i][j]+=d[i][j-1]/10; d[i][j-1]%=10; } } d[i][++d[i][0]]+=d[i][d[i][0]-1]/10;d[i][d[i][0]-1]%=10; while(d[i][0]>1&&!d[i][d[i][0]])d[i][0]--; } while(d[0][0]>1&&!d[0][d[0][0]])d[0][0]--; while(d[0][d[0][0]]>9){d[0][++d[0][0]]=d[0][d[0][0]-1]/10;d[0][d[0][0]-1]%=10;} q=max(b[0]+1,d[1][0]); p=d[0][0];s=max(p,q); for (i=1;i<=s-a[0];i++)printf(" "); for (i=a[0];i;i--)printf("%d",a[i]);printf("\n"); for (i=1;i<=s-b[0]-1;i++)printf(" ");printf("*"); for (i=b[0];i;i--)printf("%d",b[i]);printf("\n"); for (i=1;i<=s-q;i++)printf(" ");for (i=1;i<=q;i++)printf("-");printf("\n"); for (i=1;i<=b[0];i++){ for (j=1;j<=s-d[i][0]-i+1;j++)printf(" "); for (j=d[i][0];j;j--)printf("%d",d[i][j]); printf("\n"); } if (b[0]>1){ for (i=1;i<=s-p;i++)printf(" "); for (i=p;i;i--)printf("-");printf("\n"); for (i=1;i<=s-d[0][0];i++)printf(" "); for (i=d[0][0];i;i--)printf("%d",d[0][i]);printf("\n"); }}int main(){ //freopen("s.in","r",stdin); //freopen("p.out","w",stdout); scanf("%d",&n); while(n--){ memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); scanf("%s",s); l=strlen(s);i=0; while(s[i]!='+'&&s[i]!='-'&&s[i]!='*')i++;r=s[i]; a[0]=i; b[0]=l-i-1; for (j=0;j

 

转载于:https://www.cnblogs.com/moris/p/4306120.html

你可能感兴趣的文章
免费的天气预报API--谷歌,雅虎,中央气象台
查看>>
第36周日
查看>>
SQL Server 无法打开物理文件的 2 种解决办法
查看>>
推荐一款好用的文件/文件夹对比工具 —— Beyond Compare
查看>>
java设计模式--结构型模式--桥接模式
查看>>
JS window.open()属性
查看>>
JVM:从实际案例聊聊Java应用的GC优化
查看>>
关于Git的暂存区这个概念的理解.
查看>>
/dev/shm和swap差别与联系
查看>>
[翻译svg教程]svg中矩形元素 rect
查看>>
【百度地图API】如何给自定义覆盖物添加事件
查看>>
《大公司病》阅读笔记
查看>>
手机管理中的应用【6】——电源管理篇
查看>>
【Android工具】DES终结者加密时报——AES加密演算法
查看>>
效果收集-点击显示大图
查看>>
Android 开机过程PMS分析
查看>>
找不到com.apple.Boot.plist
查看>>
使用openssl创建自签名证书及部署到IIS教程
查看>>
入门视频采集与处理(学会分析YUV数据)
查看>>
java keytool详解
查看>>