華爲算法題:超長的整形數據相加

求兩個長長整型的數據的和並輸出。

例如輸入2222222222222222222222222 ,99999999999999999999999999999999999999999999

則輸出...

void movenegative(char *str,int len)
	{
		if(*str!='-')//if no nagative flag
			return;
		else
		{
			int i=0;
			for(;i<len;i++)
				*(str+i)=*(str+i+1);
			*(str+i)='\0';//the terminal of the string
		}
	}


void stringadd(char *str1,char *str2,char *result)
	{
		char *string1=str1;//先暫且考慮兩個正數
		char *string2=str2;
		char *t=result;
		char *stringg;
		int len1=strlen(str1);
		int len2=strlen(str2);
		char *str11=(char*)malloc(sizeof(char)*len1);
		char *str22=(char*)malloc(sizeof(char)*len2);
		movenegative(str1,strlen(str1));
		movenegative(str2,strlen(str2));

		for(int i=0;i<len1;i++)
		{
			*(str11+i)=*(string1+len1-i-1);
		}

		for(int i=0;i<len2;i++)
		{
			*(str22+i)=*(string2+len2-i-1);
		}
		
		int flag=0;
		int temp=0;
		int realvalue=0;
		int len=(strlen(str1)<strlen(str2))?strlen(str1):strlen(str2);
		int reallen=(strlen(str1)>strlen(str2))?strlen(str1):strlen(str2);
		for(int i=0;i<len;i++)
			{
				temp=*(str11+i)+*(str22+i);
				realvalue=temp-2*'0'+flag;//真實值
				*t++=realvalue%10+'0';
				if(realvalue>=10)
					flag=1;
				else
					flag=0;
			}

		if(len1>len2)
				stringg=str1;
		else
				stringg=str2;

		if(reallen>len)
			for(int i=0;i<reallen-len;i++)
			{
				if(flag==1)
					{
						int temp=*(stringg+reallen-len-i-1);
						int real=temp-'0'+flag;
						if(real>=10)
							{
								flag=1;
								*t++=real%10+'0';
							}
						else
							{
								*t++=*(stringg+reallen-len-i-1)+flag;
								flag=0;
							}
					}
				else
				{
					*t++=*(stringg+reallen-len-i-1);
				}
				
			}
		if(flag==1)
		{
			*t++=1+'0';
			reallen++;
		}

		for(int i=0;i<=(reallen-1)/2;i++)//翻轉計算結果
		{
			temp=*(result+i);
			*(result+i)=*(result+reallen-i-1);
			*(result+reallen-i-1)=temp;
		}
		*t='\0';
	}	


發佈了19 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章