69,369
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
#include <string.h>
#include <stdlib.h>
#define max(a,b) ((a)>(b)?(a):(b))
void swap(char *ch1, char *ch2)
{
int len1=strlen(ch1),len2=strlen(ch2);
char temp[1005];
if (len1<=len2)
{
strcpy(temp,ch1);
strcpy(ch1,ch2);
strcpy(ch2,temp);
}
}
char *add(char *ch1, char *ch2)
{
int len1=strlen(ch1),len2=strlen(ch2);
int temp=0;
ch1[len1-1]=((ch1[len1-1]-'0')+(ch2[len2-1]-'0'))%10+48;
int i=len1-2,j=len2-2;
for (i=len1-2; i>=0; i--)//³¤¶ÈÏàµÈÇé¿ö
{
if (j<0)
break;
if (((ch1[i]-'0')+(ch2[j]-'0')+temp)>9)
temp=((ch1[i]-'0')+(ch2[j]-'0')+temp)/10;
else
temp=0;
ch1[i]=((ch1[i]-'0')+(ch2[j]-'0'))%10+temp+48;
j--;
}
if (temp==1)//³¤¶È²»µÈÇÒÇ°ÃæÓнøλÇé¿ö
{
for (i=len1-len2-1; i>0; i--)
{
ch1[i]=(ch1[i]-'0'+temp)%10+48;
temp=(ch1[i]-'0'+temp)/10;
}
}
if (temp==1)//×î¸ßλ½øλÇé¿ö
{
ch1[0]=ch1[0]+1;
if (ch1[0]>'9')
{
ch1[0]='0';
for (i=len1; i>0; i--)
ch1[i]=ch1[i-1];
ch1[0]='1';
ch1[len1+1]='\0';
}
}
return ch1;
}
char *sub(char *ch1, char *ch2)
{
int len1=strlen(ch1),len2=strlen(ch2);
int i=len1-1,j=len2-1;
for (i=len1-1;i>=0; i-- )//³¤¶ÈÏàµÈ
{
if (j<0)
break;
if (ch1[i]<ch2[j])
{
ch1[i]=ch1[i]+10-ch2[j]+48;
ch1[i-1]=ch1[i-1]-1;
}
else
{
ch1[i]=ch1[i]-ch2[j]+48;
}
j--;
}
return ch1;
}
void del_0(char *ans)
{
int len=strlen(ans);
int temp=0,i=0;
for (i=0; i<len; i++)
{
if ('0'==ans[i])
{
ans[i]=NULL;
++temp;
}
else
break;
}
for (i=0; i<len; i++)
{
ans[i]=ans[temp+i];
}
}
void mul(char *ch1, char *ch2)
{
int len1=strlen(ch1),len2=strlen(ch2);
char ch3[1000009];
int i,j,carry;
for (i=0; i<1000009; i++)
ch3[i]='\0';//=0
for (i=0; i<len1; i++)
{
for (j=0; j<len2; j++)//ÏÂÃæ¿ÉÄÜascÂë´óÓÚ128
{
ch3[i+j]=ch3[i+j]+(ch1[i]-'0')*(ch2[j]-'0');//ÕâÀïÓÃ×Ö·ûÐͱíʾch3ҪעÒâ
if (ch3[i+j]>9&&(i+j)>0)
{
ch3[i+j-1]+=ch3[i+j]/10;
ch3[i+j]=ch3[i+j]%10;
}
}
}
for (i=len1+len2-1; i>0; --i)
{
if (ch3[i]>9)
{
ch3[i-1]=ch3[i-1]+ch3[i]/10;
ch3[i]%=10;
}
}
if (ch3[0]>9)//if (ch[3]>99)
{
cout<<ch3[0]/10;
ch3[0]=ch3[0]%10;
}
for (i=0; i<len1+len2-1; i++)
cout<<char(ch3[i]+48);
cout<<endl;
}
int main()
{
char ch1[1005];
char ch2[1005];
char ans[1005];
while (cin>>ch1>>ch2)
{
char ch;
cout<<"input operator: ";
cin>>ch;
if (ch=='+')
{
swap(ch1,ch2); //a+b
int len=strlen(ch1);
strcpy(ans,add(ch1,ch2));
for (int i=0; i<=len; i++)//"="½øλʱºò
cout<<ans[i];
cout<<endl;
}
else if (ch=='-')
{
int len1=strlen(ch1),len2=strlen(ch2);//a-b
if (len1<len2)
{
cout<<"-";
swap(ch1,ch2);
strcpy(ans,sub(ch1,ch2));
del_0(ans);
for (int i=0; i<len2; i++)
cout<<ans[i];
cout<<endl;
}
else
{
int temp=1;
if (len1==len2)//55-66
temp=strcmp(ch1,ch2);
if (temp<0)
{
swap(ch1,ch2);
cout<<"-";
}
strcpy(ans,sub(ch1,ch2));
del_0(ans);
for (int i=0; i<len1; i++)
cout<<ans[i];
cout<<endl;
}
}
else if (ch=='*')
{
mul(ch1,ch2);//ÕâÀïÎÒÃÇûÓп¼ÂǸºÊýµÄÇé¿ö£¬¶ÁÕß¿ÉÒÔ×Ô¼º¸Ä£¬ch[0]Ϊ·ûºÅ
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define NUM_LEN 100
int add_str(char * pch1,char * pch2 , char * chResult){
chResult[NUM_LEN-1]='\0';
int idx=NUM_LEN-2;
char *pEnd1=pch1,*pEnd2=pch2;
for(;*pEnd1!='\0';pEnd1++);
for(;*pEnd2!='\0';pEnd2++);
pEnd1--;
pEnd2--;
short flag=0; //是否有进位
for(;(pEnd1!=pch1-1) || (pEnd2!=pch2-1);){
short b1=0;
if(pEnd1!=pch1-1){
b1= (short)(*pEnd1)-(short)'0'; // '0' -> 0
pEnd1--;
}
short b2=0;
if(pEnd2!=pch2-1){
b2= (short)(*pEnd2)-(short)'0'; // '0' -> 0
pEnd2--;
}
short sResult = b1+b2+flag;
flag=0;
if(sResult>9){flag=sResult/10;sResult %=10;}
chResult[idx--] =(char)( sResult+(short)'0');
}
if(flag)chResult[idx--]=flag+(short)'0';
return idx+1;
}
int main()
{
char ch1[NUM_LEN],ch2[NUM_LEN],chResult[NUM_LEN];
printf("Num1:");
scanf("%s",ch1);
printf("\nNum2:");
scanf("%s",ch2);
printf("\nNum1=%s",ch1);
printf("\nNum2=%s",ch2);
int idx=add_str(ch1,ch2,chResult);
printf("\n结果:%s",(char*)chResult+idx);
return 0;
}
#include <stdio.h>
#include <string.h>
#define MAXLEN 1000
char a1[MAXLEN];
char a2[MAXLEN];
static int v1[MAXLEN];
static int v2[MAXLEN];
static int v3[MAXLEN];
int i,j,n,L,z;
void main(void) {
scanf("%d",&n);
for (j=0;j<n;j++) {
scanf("%s%s",a1,a2);
L=strlen(a1);
for (i=0;i<L;i++) v1[i]=a1[L-1-i]-'0';
L=strlen(a2);
for (i=0;i<L;i++) v2[i]=a2[L-1-i]-'0';
for (i=0;i<MAXLEN;i++) v3[i]=v1[i]+v2[i];
for (i=0;i<MAXLEN;i++) {
if (v3[i]>=10) {
v3[i+1]+=v3[i]/10;
v3[i]=v3[i]%10;
}
}
printf("Case %d:\n", j+1);
printf("%s + %s = ", a1, a2);
z=0;
for (i=MAXLEN-1;i>=0;i--) {
if (z==0) {
if (v3[i]!=0) {
printf("%d",v3[i]);
z=1;
}
} else {
printf("%d",v3[i]);
}
}
if (z==0) printf("0");
printf("\n");
}
}
//Sample Input
//3
//0 0
//1 2
//112233445566778899 998877665544332211
//
//Sample Output
//Case 1:
//0 + 0 = 0
//Case 2:
//1 + 2 = 3
//Case 3:
//112233445566778899 + 998877665544332211 = 1111111111111111110