HDU2100 Lovekey
来源:互联网 发布:雅马哈电子琴知乎 编辑:程序博客网 时间:2024/06/05 16:31
这道题我首先 想的是将两组字符串全都转化为十进制 ,然后将其相加,然后再将其转化为二十六进制,之后我测试实例都对但wa了,我就是试了下将测试实例数组放长,程序就无法给出正解了,代码(wa)如下:
# include<stdio.h>
# include<string.h>
char a[210];
char b[201];
char c[201];
long long f(long long a,long long b){
long long ans=1;
while(b>0){
if(b%2==1) ans=ans*a;
a=a*a;
b=b/2;
}
return ans;
}
int main(){
int i;
long long sum1,sum2,sum;
while(scanf("%s %s",a,b)!=EOF){
sum1=sum2=0;
for(i=0;i<strlen(a);i++)
sum1=sum1+(a[i]-'A')*f(26,strlen(a)-i-1); //我认为应该是在此处将26进制转化时数过大,无法继续存储 假设 5*26的19次方 ,想想26的19次方 也太大了吧
for(i=0;i<strlen(b);i++)
sum2=sum2+(b[i]-'A')*f(26,strlen(b)-i-1);
sum=sum1+sum2;
i=0;
printf("%I64d\n",sum1);
printf("%I64d\n",sum2);
while(sum!=0){
c[i++]=sum%26+'A';
sum=sum/26;
}
for(i=strlen(c)-1;i!=-1;i--)
printf("%c",c[i]);
printf("\n");
for(i=0;i<=200;i++)
c[i]='\0';
}
}
改正后的代码:
# include<stdio.h>
# include<string.h>
//# define max(a,b) (((a)>(b))?(a):(b))
char a[210];
char b[210];
int la[210];
int lb[210];
//将字符数组ab的值转化为十进制存放
int l[210];
int main(){
int flag,l1,l2,i,j;
while(~scanf("%s %s",a,b)){
memset(la,0,sizeof(la[0])*210);
memset(lb,0,sizeof(lb[0])*210);
memset(l,0,sizeof(l[0])*210);
// 注意清空 la lb l 数组的值 ,这里我重新赋为0
flag=0; // 标记 进位用
l1=strlen(a);
l2=strlen(b);
for(i=0;i<l1;i++){
la[l1-i-1]=a[i]-'A'; // 因为相加的时候是从个位开始往后加,所以将小位存放到前面,大位放到后面,这样进位也方便,最后只要倒着输出就好
// printf("%d ",la[l1-i-1]);
}
// printf("\n");
for(i=0;i<l2;i++){
lb[l2-i-1]=b[i]-'A';
// printf("%d ",lb[l2-i-1]);
}
// printf("\n");
for(i=0;i<200;i++){// 注意是i<200 因为2个2位数相加可能是3位数,也可能是2位数
l[i]=la[i]+lb[i]+flag; //flag标记进位 , 满26进,前一个数减26 后一位数加1 (和十位数相加一样)
// printf("%d ",l[i]);
if(l[i]>=26){
l[i]-=26;
flag=1;
}
else
flag=0;
}
for(j=i-1;j>=1;)// 这里我是去除前导零
if(l[j]+'A'=='A')
j--;
else
break;
for(i=j;i>=0;i--) //倒着输出即可
printf("%c",l[i]+'A');
printf("\n");
}
}
再多看看别人是怎么写的吧。。。看看还有什么方法。
- HDU2100 Lovekey
- hdu2100
- Lovekey
- Lovekey
- hdu2100(大数)
- hdu-Lovekey
- Lovekey(大数)
- hdu2100 26进制加法
- HDU 2100 Lovekey
- HDU 2100 Lovekey
- hdu acm 2100 Lovekey
- HDU 2100 LoveKey
- HDU 2100 Lovekey
- hdu 2100 Lovekey
- HDU--2100 -- Lovekey
- Hdu---Lovekey---2100
- hdu-2100-Lovekey
- hdu 2100 Lovekey
- UESTC 1711 Divide 位操作模拟题
- poj 2431 Expedition 【优先队列】
- C#图像处理实践——图片不同提取
- CGContextAddArcToPoint和CGContextAddArc
- 测试用例和面试经验
- HDU2100 Lovekey
- css 清浮动
- Android 为ListView添加头部试图
- Android 图片特效(二):ColorMatrix(颜色矩阵)与图片的底片效果、老照片效果
- MFC 为树形控件添加图标
- 在Vmware/VirtualBox虚拟机环境中正确打开虚拟机
- 交叉字符串
- .text()
- hadoop