课程设计题目:超长整数处理
32课程设计题目:超长整数处理2*(由 完成)
课程设计内容:用C语言编写程序完成以下任务:
采用链表来表示一个带符号的超长整数(20位以上)。并且进行如下处理。
将超长整数s按3位为一组分割,该三位数相加,并替换原来的三位数,构成一个新数(不考虑进位)。显示并存在文件file32.txt中。例如,当s为870539421768945时,显示的数为:57718。
提示:超长整数要用字符串实现输入,按3位截取,转成整型存放在链表中(每个节点存放3位,如870-539-421-768-945),然后即可处理。
课程设计要求:
1.贯彻结构化程序设计思想。
2.用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
3.用户界面中的菜单至少应包括“输入超长整数”、“运算”、“退出”3项。
4.代码应适当缩进,并给出必要的注释,以增强程序的可读性。
大家帮帮忙,这个是个新题,我想了很多天了,总是出错,还有几天就要交程序了,如果交不上可能要挂科,过年还得学!麻烦了,求高人帮忙!我QQ848782824 ,可以发到我的邮箱里面!也可以发到这个上面
[解决办法]
我以前写的,用数组,自己看方法,自己改成符合你的要求就可以了。
- C/C++ code
//大数相乘#include<stdio.h>#include<string.h>#include<malloc.h>#define MaxLen 50/*#define DEBUG*/int main(int argc,char *argv[]){ char inLeft[MaxLen],inRight[MaxLen]; int m,n; int i,j,k,r,sum,increat; int *Left,*Right,**Result; int loc; //填入位置 printf("\nInput the left number : "); scanf("%s",inLeft); printf("Input the right number : "); scanf("%s",inRight); #ifdef DEBUG printf("\nLeft number = %s , Right number= %s \n",inLeft,inRight); #endif m=strlen(inLeft); n=strlen(inRight); #ifdef DEBUG printf("Length of left number is : %d , right is : %d \n",m,n); #endif //allocate space Left=(int *)malloc(m*sizeof(int)); Right=(int *)malloc(n*sizeof(int)); Result=(int **)malloc((n+1)*sizeof(int *)); for(i=0;i<n+1;i++) { Result[i]=(int *)malloc((m+n)*sizeof(int)); } //initialize for(i=0;i<m;i++) { Left[i]=(int)inLeft[i]-48; } for(i=0;i<n;i++) { Right[i]=(int)inRight[i]-48; } for(i=0;i<n+1;i++) { for(j=0;j<m+n;j++) { Result[i][j]=0; } } //test initialize #ifdef DEBUG printf("\nLeft is : \n"); for(i=0;i<m;i++) { printf("%3d",Left[i]); } printf("\nRight is : \n"); for(i=0;i<n;i++) { printf("%3d",Right[i]); } printf("\nResult is : \n"); for(i=0;i<n+1;i++) { for(j=0;j<m+n;j++) { printf("%3d",Result[i][j]); } printf("\n"); } #endif //运算 loc=m+n-1; k=n-1; for(i=0;i<n;i++) { r=loc; increat=0; for(j=m-1;j>=0;j--) { Result[i][r]=(Left[j]*Right[k]+increat)%10; increat=(Left[j]*Right[k]+increat)/10; r--; } if(increat!=0) { Result[i][r]=increat; } loc--; k--; } //计算最终结果 increat=0; for(i=m+n-1;i>=0;i--) { sum=0; for(j=n-1;j>=0;j--) { sum+=Result[j][i]; } Result[n][i]=(sum+increat)%10; increat=(sum+increat)/10; } if(increat!=0) { Result[n][i]=increat; } //test caculate #ifdef DEBUG printf("\nResult is : \n"); for(i=0;i<n+1;i++) { for(j=0;j<m+n;j++) { printf("%3d",Result[i][j]); } printf("\n"); } #endif printf("\n%s * %s = ",inLeft,inRight); for(i=0;i<m+n;i++) { if(Result[n][i]!=0) { for(j=i;j<m+n;j++) { printf("%d",Result[n][j]); } break; } } printf("\n"); //free space if(Left!=NULL) { free(Left); Left=NULL; } if(Right!=NULL) { free(Right); Right=NULL; } if(Result[0]!=NULL) { for(i=0;i<n+1;i++) { free(Result[i]); Result[i]=NULL; } } if(Result!=NULL) { free(Result); Result=NULL; } return 0;}