HDU 1230 화성 A + B (2017 년 청 화 연 원 보 연기 시험 1 번)
화성 A + B
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13833 Accepted Submission(s): 4769
Problem Description
25 위 를 넘 지 않 는 화성 정수 A 와 B 를 읽 고 A + B 를 계산한다.주의해 야 할 것 은 화성 에서 정 수 는 단일 진법 이 아니 라 n 위의 진법 은 n 번 째 소수 이다.예 를 들 어 지구 상의 10 진수 2 는 화성 에 '1, 0' 이 라 고 기록 하 는데 화성의 한 자릿수 는 2 진법 이기 때문이다.지구 상의 10 진수 38 은 화성 에 '1, 1, 1, 0' 이 라 고 기록 되 어 있다. 화성 은 한 자릿수 가 2 진법 이 고, 열 자릿수 는 3 진법 이 며, 백 자릿수 는 5 진법 이 고, 천 자릿수 는 7 진법 이기 때문이다.
Input
테스트 입력 은 몇 가지 테스트 사례 를 포함 하고 모든 테스트 사례 는 한 줄 을 차지 하 며 두 개의 화성 정수 A 와 B 를 포함 하 며 화성 정수 와 인접 한 두 자릿수 는 쉼표 로 구분 되 며 A 와 B 사이 에는 빈 칸 이 있다.A 나 B 가 0 일 때 입력 이 끝나 면 해당 결 과 는 출력 하지 마 십시오.
Output
모든 테스트 용례 에 1 줄, 즉 화성 표현법 의 A + B 값 을 출력 합 니 다.
Sample Input
1,0 2,1
4,2,0 1,2,0
1 10,6,4,2,1
0 0
Sample Output
1,0,1
1,1,1,0
1,0,0,0,0,0
------------------------------------------------------------
사고의 방향
모 의 문제.먼저 보조 프로그램 을 써 서 앞의 25 개의 소 수 를 계산 한 다음 에 아 날로 그 진법 덧셈 을 해 야 한다.덧셈 의 과정 은 백 련 대 정수 의 덧셈 곱 하기 (C + 높 은 정밀도) 와 유사 하 다.
------------------------------------------------------------
코드
#include
#include
#include
const int P[25] = { 2, 3, 5, 7,11,13,17,19,23,29,
31,37,41,43,47,53,59,61,67,71,
73,79,83,89,97};
char s1[105], s2[105];
int a1[30], a2[30];
int b[30];
int n1, n2, nb; //
void solve()
{
int i = 0, len1 = strlen(s1), len2 = strlen(s2), num = 0, cnt = 0, dig;
for (i=0; i= '0' && dig <= '9')
{
dig = dig - '0';
num = num * 10 + dig;
}
else if (dig == ',')
{
a1[cnt++] = num;
num = 0;
}
}
a1[cnt++] = num;
n1 = cnt;
num = 0;
cnt = 0;
for (i=0; i= '0' && dig <= '9')
{
dig = dig - '0';
num = num * 10 + dig;
}
else if (dig == ',')
{
a2[cnt++] = num;
num = 0;
}
}
a2[cnt++] = num;
n2 = cnt;
}
void cal()
{
int i = 0, s = 0, si = 0;
for (i = 0; i < std::min(n1, n2); i++)
{
s = a1[n1-1-i] + a2[n2-1-i] + si;
b[i] = s%P[i];
si = s/P[i];
}
if (n1 > n2)
{
for (i = n2; i < n1; i++)
{
s = a1[n1-1-i] + si;
b[i] = s % P[i];
si = s / P[i];
}
}
else
{
for (i = n1; i < n2; i++)
{
s = a2[n2-1-i] + si;
b[i] = s % P[i];
si = s / P[i];
}
}
if (si > 0)
{
b[i] = si;
nb = i + 1;
}
else
{
nb = i;
}
}
void numprint()
{
int i = 0;
if (nb == 1)
{
printf("%d
", b[0]);
}
else
{
for (i=nb-1; i>0; i--)
{
printf("%d,", b[i]);
}
printf("%d
", b[0]);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("hdu1230.txt", "r", stdin);
#endif
while (1)
{
scanf("%s%s", s1, s2);
solve();
if (n1 == 1 && n2 == 1 && a1[0] == 0 && a2[0] == 0)
{
break;
}
cal();
numprint();
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
1021. Deepest Root(25) [병렬 검색 + 심층 검색] -PAT(Advanced Level) PractiseDeepest Root (25) 시간 제한 1500ms 메모리 제한 65536kB 코드 길이 제한 16000B A graph which is connected and acyclic can be considered a...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.