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;
}
展开
 我来答
White_MouseYBZ
2013-09-18 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6659万
展开全部
逻辑有错吧?一个乘数为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);
}
追问
貌似我没描述清楚? 数据溢出时是为0 但需要的是log(2^64) long long 型 的数据上限为2^64-1
Is_it_right
2013-09-19 · TA获得超过1031个赞
知道小有建树答主
回答量:410
采纳率:0%
帮助的人:410万
展开全部
要用unsigned long long和"%llu"
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式