C语言 A*B Problem
输入两个自然数,输出他们相乘后数的位数。(1<=a,b<=2^64)我用了个取巧的方法在某个OJ上测了次就差一个没过怎么都想不通是哪里?直接计算器算出ln2^64的值当数...
输入两个自然数,输出他们相乘后数的位数。(1<=a,b<=2^64)
我用了个取巧的方法在某个OJ上测了次 就差一个没过 怎么都想不通是哪里?
直接计算器算出ln2^64 的值 当数据给出的是2^64时 数据会溢出变为0 这是思路
#include <stdio.h>
#include <math.h>
int main()
{
long long A,B;
int C;
scanf("%lld %lld", &A, &B);
if (A==0&&B!=0) C=(int)(44/log(10)+log(B)/log(10))+1;
else if (A!=0&&B==0) C=(int)(log(A)/log(10)+44/log(10))+1;
else if (A==0&&B==0) C=(int)(44/log(10)+44/log(10))+1;
else C=(int)(log(A)/log(10)+log(B)/log(10)+1);
printf ("%d", C);
return 0;
} 展开
我用了个取巧的方法在某个OJ上测了次 就差一个没过 怎么都想不通是哪里?
直接计算器算出ln2^64 的值 当数据给出的是2^64时 数据会溢出变为0 这是思路
#include <stdio.h>
#include <math.h>
int main()
{
long long A,B;
int C;
scanf("%lld %lld", &A, &B);
if (A==0&&B!=0) C=(int)(44/log(10)+log(B)/log(10))+1;
else if (A!=0&&B==0) C=(int)(log(A)/log(10)+44/log(10))+1;
else if (A==0&&B==0) C=(int)(44/log(10)+44/log(10))+1;
else C=(int)(log(A)/log(10)+log(B)/log(10)+1);
printf ("%d", C);
return 0;
} 展开
展开全部
逻辑有错吧?一个乘数为0时不就是1位吗?还要算?好像如下就可以了——
void main(void){
long long A,B;
int C;
scanf("%lld %lld", &A, &B);
if(A==0 || B==0) C=1;
else C=(int)(log10(A)+log10(B))+1;//如果你的平台没有log10就用你原来的算法.
printf ("%d", C);
}
void main(void){
long long A,B;
int C;
scanf("%lld %lld", &A, &B);
if(A==0 || B==0) C=1;
else C=(int)(log10(A)+log10(B))+1;//如果你的平台没有log10就用你原来的算法.
printf ("%d", C);
}
追问
貌似我没描述清楚? 数据溢出时是为0 但需要的是log(2^64) long long 型 的数据上限为2^64-1
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询