화성 A+B(hdu 1230)진법 전환
10459 단어 HDU
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10634 Accepted Submission(s): 3547
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
제목:중국어 문제,제목 을 너무 중시 하지 말 아야 지.
사고방식:모든 사람 을 더 하고 모든 사람의 진수 와 비교 하면 큰 것 과 진수 가 서로 줄 어 든 다음 에 높 은 자리 에 하 나 를 더 합 니 다.관건 은 문자 와 숫자의 변환,그리고 가장 높 은 비트 의 진입 문 제 를 처리 하 는 것 이다.그렇지 않 으 면 자릿수 가 맞지 않 는 다.
#include<stdio.h>
#include<string.h>
int prime[26]= {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,101};
int a[30],b[30],sum[30];
char aa[1000],bb[1000];
int main()
{
char ch;
int i,j,k;
while(scanf("%s%s",aa,bb)!=EOF)
{
if(strlen(aa)==1&&strlen(bb)==1&&aa[0]=='0'&&bb[0]=='0')
break;
// printf("%s\t%s
",aa,bb);
for(i=0;i<30;i++)
a[i]=b[i]=sum[i]=0;
int lena=0,temp=0;
for(i=0; i<strlen(aa); i++)
{
if(aa[i]!=',')
{
temp*=10;
temp+=aa[i]-'0';
}
// printf("%d\t",temp);
if(aa[i]==',')
{
a[lena++]=temp;
temp=0;
}
}
a[lena]=temp;
// for(i=0;i<=lena;i++)
// printf("%d\t",a[i]);
// printf("
");
int lenb=0;
temp=0;
for(i=0; i<strlen(bb); i++)
{
if(bb[i]!=',')
{
temp*=10;
temp+=bb[i]-'0';
}
if(bb[i]==',')
{
b[lenb++]=temp;
temp=0;
}
}
b[lenb]=temp;
// for(i=0; i<=lenb; i++)
// printf("%d\t",b[i]);
// printf("
");
int len=0;
int cnt=0;//
// printf("a[lena]=%d\tb[lanb]=%d
",a[lena],b[lenb]);
for(i=lena,j=lenb,k=0;i>=0||j>=0;k++,i--,j--)
{
if(i<0) sum[k]+=b[j];
else if(j<0) sum[k]+=a[i];
else sum[k]+=a[i]+b[j];
if(sum[k]>=prime[k])
{
sum[k]-=prime[k];
sum[k+1]++;
}
}
printf("%d",sum[k]>0?sum[k]:sum[--k]);
for(i=k-1;i>=0;i--)
{
printf(",%d",sum[i]);
}
printf("
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU] 4089 활성화 확률 DPdp[i][j]를 모두 i개인의 대기열인 Tomato가 j위 서버가 마비될 확률로 역추를 사용하면 우리는 상태 이동 방정식을 얻을 수 있다. i == 1 : dp[1][1] = dp[1][1] * p1 + dp[1]...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.