기초 연습 고밀도 덧셈

문제 설명
두 정수 a 와 b 를 입력 하고 이 두 정수 의 합 을 출력 합 니 다.a 와 b 는 모두 100 명 을 넘 지 않 는 다.
알고리즘 설명
a 와 b 가 비교적 크기 때문에 언어의 표준 데이터 형식 으로 직접 저장 할 수 없습니다.이런 문제 에 대해 서 는 일반적으로 배열 로 처리한다.하나의 배열 A,A[0]를 a 의 한 자 리 를 저장 하 는 데 사용 하고 A[1]는 a 의 10 자 리 를 저장 하 는 데 사용 하 는 것 으로 유추 된다.같은 배열 B 로 b 를 저장 할 수 있다.계산 c = a + b 일 때 먼저 A[0]와 B[0]를 더 하고 진 위 를 발생 시 키 면 진 위 를 r 에 저장 하고 화 된 한 자릿수 를 C[0],즉 C[0]는(A[0]+B[0])%10 에 저장한다.그 다음 에 A[1]와 B[1]을 더 하면 낮은 위치 에서 올 라 온 값 r 도 더 해 야 한다.즉,C[1]는 A[1],B[1]와 r 세 개의 수의 합 이 어야 한다.만약 에 또 진 위 를 만 들 면 새로운 진 위 를 r 에 저장 하고 한 자 리 를 C[1]에 저장 할 수 있다.이런 유추 에 의 하면 C 의 모든 위 치 를 구 할 수 있다.마지막 으로 C 를 출력 하면 됩 니 다.
입력 형식
입력 은 두 줄 을 포함 하고 첫 번 째 행 위 는 마이너스 정수 a 가 아니 며 두 번 째 행 위 는 마이너스 정수 b 가 아 닙 니 다.두 정수 모두 100 위 를 넘 지 않 고 두 수의 최고 위 는 0 이 아니다.
출력 형식
한 줄 출력 + b 의 값.
샘플 입력
20100122201001221234567890 2010012220100122
샘플 출력
20100122203011233454668012
해법 1:
/*         ,                 ,      */
#include
#include
using namespace std;
int main()
{
	char a[102],b[102];
	char c[110];//       
    //        
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	cin >> a;
	cin >> b;
	int sc = 0;
	int k = 0;
	int la = strlen(a);
	int lb = strlen(b);
	if(la > lb) //          
	{
		for(int i = la-1,j = lb-1;j >= 0;--j,--i)
		{
			c[k++] = (a[i] + b[j] - '0' * 2 + sc) % 10 + '0';//     ,      ‘0’
			sc = (a[i] + b[j] - '0' * 2 + sc) / 10;	//    
		}	
		for(int i = la - lb - 1;i >= 0;--i)
		{
			c[k++] = (a[i] - '0' + sc) % 10 + '0';
			sc = (a[i] - '0' + sc) / 10;
		}
		if(sc) //         ,              
		{
			c[k] = sc + '0';
		} 
		for(int i = strlen(c)-1;i >= 0;--i)
		{
			cout<= 0;--j,--i)
		{
			c[k++] = (a[i] + b[j] - '0' * 2 + sc) % 10 + '0';
			sc = (a[i] + b[j] - '0' * 2 + sc) / 10;	
		}	
		for(int i = lb - la - 1;i >= 0;--i)
		{
			c[k++] = (b[i] - '0' + sc) % 10 + '0';
			sc = (b[i] - '0' + sc) / 10;
		}
		if(sc)
		{
			c[k] = sc + '0';
		} 
		for(int i = strlen(c)-1;i >= 0;--i)
		{
			cout<

해법 2:
#include
#include
#include  //stringstream     
using namespace std;
int main()
{
	char a[102],b[102];
	int c[110];
	stringstream str; //    ,        cin,cout
	int sa[102],sb[102];
	memset(sa,0,sizeof(sa));
	memset(sb,0,sizeof(sb));
	memset(c,0,sizeof(c));
	cin >> a;
	cin >> b;
	int la = strlen(a);
	int lb = strlen(b);
	for(int i = la-1;i >= 0;--i)
	{
		str << a[i];
		str >> sa[la-1-i];
		str.clear();
	}
	for(int i = lb-1;i >= 0;--i)
	{
		str << b[i];
		str >> sb[lb-1-i];
		str.clear();
	}
	int sc = 0;
	int k = 0;
	int len; //         
	if(la > lb)
	{
		len = la;	
	}
	else
	{
		len = lb;
	}
	int i;
	for(i = 0;i < len;++i)
	{
		c[i] = (sa[i] + sb[i] + sc) % 10;
		sc = (sa[i] + sb[i] + sc) / 10;	
	}
	int j = i - 1;
	if(sc)  //           
	{
		c[i] = 1;
		j = i;
	}	
	for(int k = j;k >= 0;--k)
	{
		cout<

좋은 웹페이지 즐겨찾기