首页
社区
课程
招聘
[原创]解析字符串大数加减法
发表于: 2011-11-10 13:35 6224

[原创]解析字符串大数加减法

2011-11-10 13:35
6224
娱乐娱乐,很菜的代码,第一个加法代码百度来的,减法自己写的,让各位大牛笑话了。
#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;
}



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (3)
雪    币: 351
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错 支持分享
2011-11-10 13:55
0
雪    币: 3511
活跃值: (4037)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
3
很强大,支持一个。
2011-11-10 15:45
0
雪    币: 384
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
试试效率怎么样
2011-11-14 23:13
0
游客
登录 | 注册 方可回帖
返回
//