程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu_1013_A + B Problem II_(模擬)

hdu_1013_A + B Problem II_(模擬)

編輯:C++入門知識

hdu_1013_A + B Problem II_(模擬)


 
解題思路:利用數組進行大數的相加。內置數據類型不能滿足整數位數的要求。
樣例:
	1 999
	999 1
#include 
#include 
using namespace std;
int num1[1010],num2[1010];
int t[1010];
int result[1010];
char str1[1010],str2[1010];

void add(int len1,int len2)
{
	int i,j;
	//字符轉換成數字,再反轉 
	for(i = 0;i < len1;i++)
		t[i] = str1[i] - 48;
	for(i = len1 - 1,j = 0;i >= 0;i--,j++)
		num1[j] = t[i];
		
	for(i = 0;i < len2;i++)
		t[i] = str2[i] - 48;
	for(i = len2 - 1,j = 0;i >= 0;i--,j++)
		num2[j] = t[i];
	
	int k = 0,temp,cnt = 0;
	i = 0;
	while(i < len1 || i < len2)
	{
		temp = num1[i] + num2[i] + cnt;//cnt表示進位 
		if(temp >= 10)
		{
			cnt = 1;
			result[i] = temp % 10;
		}
		else
		{
			result[k] = temp;
			cnt = 0;
		}
		i++;
		k++;
	}
	result[k] = cnt;//假如是99+99,則最後的進位1要記錄下來 
	
	for(i = 0;i < len1;i++)
		cout << str1[i];
	cout <<  + ;
	for(i = 0;i < len2;i++)
		cout << str2[i];
	cout <<  = ;	
		
	if(result[k] != 0)
	   	   cout << result[k];
	int ii;
	for(ii = k-1;ii >= 0;ii--)
	{
	   	cout << result[ii];
	}
	cout << endl;
}
int main(int argc, char *argv[])
{
	int s,cnt = 1;
	cin >> s;   
	int a = s;      
	while(s--)
	{
		memset(num1,0,sizeof(num1));
		memset(num2,0,sizeof(num2));//每次都要初始化num1和num2 的數組,沒有則會WA 
		memset(result,0,sizeof(result));
		cin >> str1 >> str2;
		cout << Case  << cnt << : << endl;
		add(strlen(str1),strlen(str2));
		if(cnt < a) //最後的樣例沒有空行 
			cout << endl;
		cnt++;
	}
	return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved