娱乐娱乐,很菜的代码,第一个加法代码百度来的,减法自己写的,让各位大牛笑话了。
代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <windows.h> char *String="你54839865486548650468054658847397577599他554238599778899934566666666666666666666999999999999999999999999我8888888888888888888888888888888888888"; void Memcpy(void *Str1,void *Str2) { char *szTemp1=Str1; char *szTemp2=Str2; memset(Str1,0,strlen(Str1)); while(*szTemp2>=0x30&&*szTemp2<=0x39) { *szTemp1=*szTemp2; szTemp1++; szTemp2++; } } /************************************ 大数加法 ************************************/ void Add(char *dst,char *src) { int i=0; int j=0; int k = 0; char tmp[MAX_PATH]; memset(tmp,0,MAX_PATH); for (i = strlen(dst)-1,j = strlen(src)-1;i >= 0 && j >= 0;--i,--j) tmp[k++] = dst[i]+src[j]-0x30-0x30; for (;i >= 0;--i) tmp[k++] = dst[i]-0x30; for (;j >= 0;--j) tmp[k++] = src[j]-0x30; tmp[k] = 0; for (i = 0;i < k;++i) { tmp[i+1] += tmp[i]/10; tmp[i] %= 10; } if (!tmp[k]) --k; for (i = 0;i <= k;++i) dst[i] = tmp[k-i] + '0'; dst[k+1] = '\0'; } /************************************ 大数减法 ************************************/ void Sub(char *dst,char *src) { int dstLen=strlen(dst)-1; int srcLen=strlen(src)-1; int k=0; char temp[MAX_PATH]; memset(temp,0,MAX_PATH); if(*dst==0) { return; } for(;dstLen>=0&&srcLen>=0;--dstLen,--srcLen) { if(dst[dstLen]<src[srcLen]) { temp[k++]=(0xA+(dst[dstLen]-src[srcLen])); dst[dstLen-1]-=1; } else{ temp[k++]=dst[dstLen]-src[srcLen]; } } for(;dstLen>=0;--dstLen) { temp[k++]=dst[dstLen]-0x30; } if(!temp[k]) --k; for (dstLen = 0;dstLen <= k;++dstLen) dst[dstLen] = temp[k-dstLen] + '0'; dst[k+1] = '\0'; } int main(void) { char szAddSum[MAX_PATH]; char szSubSum[MAX_PATH]; char szTemp[MAX_PATH]; memset(szAddSum,0,MAX_PATH); memset(szSubSum,0,MAX_PATH); memset(szTemp,0,MAX_PATH); char *stemp=String; while(*stemp) { stemp++; while(*stemp>=0x30&&*stemp<=0x39) { Memcpy(szTemp,stemp); stemp+=lstrlen((char*)szTemp)+1; Add(szAddSum,szTemp); } } printf("add sum is:%s\n",szAddSum); while(*String) { String++; while(*String>=0x30&&*String<=0x39) { Memcpy(szTemp,String); String+=lstrlen((char*)szTemp)+1; Sub(szAddSum,szTemp); printf("sub sum is:%s\n",szAddSum); } } system("pause"); return 0; }