![]() |
#2
zhaojigao2012-09-10 16:21
# include <stdio.h>
# include <string.h> # include <iostream> # include <fstream> using namespace std; #define LIMIT 80 void jia(char *ch1,char *ch2,char *ch3) { int len1=strlen(ch1),len2=strlen(ch2),len3,i,tmp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0}; for(i=len1-1;i>=0;i--) num1[len1-1-i]=ch1[i]-48; for(i=len2-1;i>=0;i--) num2[len2-1-i]=ch2[i]-48; i=0,tmp=0,len3=len1>len2?len1:len2; while(i<len3) { num3[i]=num1[i]+num2[i]+tmp; tmp=0; if(num3[i]>=10){tmp=num3[i]/10;num3[i]%=10;} i++; } if(tmp!=0){num3[i]=tmp;i++;} len3=i; for(i=len3-1;i>=0;i--) ch3[len3-1-i]=num3[i]+48; ch3[len3]='\0'; } void cheng(char *ch1,char *ch2,char *ch3) { int i,j,len1=strlen(ch1),len2=strlen(ch2),len3, temp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0}; for(i=len1-1;i>=0;i--) num1[len1-1-i]=ch1[i]-48; for(i=len2-1;i>=0;i--) num2[len2-1-i]=ch2[i]-48; for(i=0;i<len1;i++) { temp=0; for(j=0;j<len2;j++) { num3[i+j]+=num1[i]*num2[j]+temp; temp=0; if(num3[i+j]>=10) { temp=num3[i+j]/10; num3[i+j]%=10; } } while(temp!=0) { num3[i+j]+=temp;temp=num3[i+j]/10;j++; } } len3=len1+len2; while(len3>1&&num3[len3-1]==0) len3--; for(i=0;i<len3;i++) ch3[len3-1-i]=num3[i]+48; ch3[len3]='\0'; } void main() { cout<<" *********主菜单*********\n"; cout<<" * 1 两数相加 *\n"; cout<<" * 2 两数相乘 *\n"; cout<<" * 3 从文件操作 *\n"; cout<<" * 4 退出 *\n"; cout<<" ************************\n"; char ch1[LIMIT],ch2[LIMIT],ch3[LIMIT]; void jia(char *ch1,char *ch2,char *ch3); void cheng(char *ch1,char *ch2,char *ch3); int a=0; cin>>a; switch(a) { case 1: { printf("请输入第一个数\n"); scanf("%s",ch1); printf("请输入第二个数\n"); scanf("%s",ch2); printf("\n"); jia(ch1,ch2,ch3); printf("两数之和:%s\n",ch3); break; } case 2: { printf("请输入第一个数\n"); scanf("%s",ch1); printf("请输入第二个数\n"); scanf("%s",ch2); printf("\n"); cheng(ch1,ch2,ch3); printf("两数之积为:%s\n",ch3); break; } case 3: { cout<<"从文家中读取数字操作"; break; } case 4: { cout<<"退出"; break; } default: { cout<<"输入错误"; break; } } } 由于文件的操作具体在么实现你没有说的太清楚所以就没有写出来 如果需要添加可以再 cout<<"从文家中读取数字操作"; 这里天剑你的代码 |
#include<string.h>
#define LIMIT 80
void jia(char *ch1,char *ch2,char *ch3)
{
int len1=strlen(ch1),len2=strlen(ch2),len3,i,tmp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0};
for(i=len1-1;i>=0;i--)
num1[len1-1-i]=ch1[i]-48;
for(i=len2-1;i>=0;i--)
num2[len2-1-i]=ch2[i]-48;
i=0,tmp=0,len3=len1>len2?len1:len2;
while(i<len3)
{
num3[i]=num1[i]+num2[i]+tmp;
tmp=0;
if(num3[i]>=10){tmp=num3[i]/10;num3[i]%=10;}
i++;
}
if(tmp!=0){num3[i]=tmp;i++;}
len3=i;
for(i=len3-1;i>=0;i--) ch3[len3-1-i]=num3[i]+48;
ch3[len3]='\0';
}
void cheng(char *ch1,char *ch2,char *ch3)
{
int i,j,len1=strlen(ch1),len2=strlen(ch2),len3,
temp,num1[LIMIT]={0},num2[LIMIT]={0},num3[LIMIT]={0};
for(i=len1-1;i>=0;i--)
num1[len1-1-i]=ch1[i]-48;
for(i=len2-1;i>=0;i--)
num2[len2-1-i]=ch2[i]-48;
for(i=0;i<len1;i++)
{
temp=0;
for(j=0;j<len2;j++)
{
num3[i+j]+=num1[i]*num2[j]+temp;
temp=0;
if(num3[i+j]>=10)
{
temp=num3[i+j]/10;
num3[i+j]%=10;
}
}
while(temp!=0)
{
num3[i+j]+=temp;temp=num3[i+j]/10;j++;
}
}
len3=len1+len2;
while(len3>1&&num3[len3-1]==0)
len3--;
for(i=0;i<len3;i++)
ch3[len3-1-i]=num3[i]+48;
ch3[len3]='\0';
}
void main()
{
char ch1[LIMIT],ch2[LIMIT],ch3[LIMIT];
void jia(char *ch1,char *ch2,char *ch3);
void cheng(char *ch1,char *ch2,char *ch3);
printf("请输入第一个数\n");
scanf("%s",ch1);
printf("请输入第二个数\n");
scanf("%s",ch2);
printf("\n");
jia(ch1,ch2,ch3);
printf("两数之和:%s\n",ch3);
cheng(ch1,ch2,ch3);
printf("两数之积为:%s\n",ch3);
getchar();
getchar();
}
这是一个长整数加乘的代码问题有二:
1 需要一个界面类似这样
("*********主菜单*********\n");
("* 1 两数相加 *\n");
("* 2 两数相乘 *\n");
("* 3 退出 *\n");
("*************************\n");按相应的数字能有相应的功能
2 从文件读入长整数,并将运算结果保存到文件中。
希望哪位大侠把问题都解决了,或者先一个都行,小女子急需啊
