Pages

Programming Contest

Soal 1 [A + B]

diberikan 2 buah integer A dan B yang belum pasti merupakan bilangan basis-10, temukannilai terkecul yang mungkin dari A+B dalam basis-10,

sebagai contoh,
A=213 kemungkinannya basis-4 (39 dalam basis-10)
A=4721 kemungkinannya basis-8 (2513 dalam basis-10)
A+B=39+2513=2552

Format Input :
baris pertama dari input terduru daru sebuah bilangan bulat positif T (1<=T<=100), banyaknya test case, masing-masing test case mempunyia dua bilangan bulat positif A dan B, A dan B akan terfiri paling banyak 5 digit, masibg-masing digit di antara 0 dan 9 (termauk 0 dan 9), dan tidak di awali dengan nol.

Format Output :
untuk masinbg-masing test case, outputkan bilangan bulat dalam basis-10 yang menyatakan nilai terkecil yang mungkin dari A+B

Contoh Input
2
213 4721
1001 90
Output untuk contoh input :
2552
99


Dibawah ini adalah salah satu dari solusi problem diatas...



#include "stdio.h"

int main()
{
int a[10],b[10];
int i,n,j,k;
int x[5],y[5];
int max=0,temp;
int divs,pow,pangkat;

scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%d %d",&a[i],&b[i]);
divs=10000;
temp=a[i];
max=0;
for(j=0;j<5;j++){
x[j]=temp/divs;
temp=temp%divs;
divs=divs/10;
if(x[j]>max)
max=x[j];
}

a[i]=0;
for(j=4;j>=0;j--){
if(max<2){
pangkat=2;
}else if(max<4){
pangkat=4;
}else if(max<8){
pangkat=8;
}else if(max<10){
pangkat=10;
}
pow=1;

for(k=0;k<4-j;k++){
pow=pow*pangkat;
}

a[i]=a[i]+(x[j]*pow);
}

max=0;
divs=10000;
temp=b[i];
max=0;
for(j=0;j<5;j++){
x[j]=temp/divs;
temp=temp%divs;
divs=divs/10;
if(x[j]>max)
max=x[j];
}

b[i]=0;
for(j=4;j>=0;j--){
if(max<2){
pangkat=2;
}else if(max<4){
pangkat=4;
}else if(max<8){
pangkat=8;
}else if(max<10){
pangkat=10;
}
pow=1;

for(k=0;k<4-j;k++){
pow=pow*pangkat;
}

b[i]=b[i]+(x[j]*pow);
}
}

for(i=0;i<n;i++){
printf("%d\n",a[i]+b[i]);
}
return 0;
}