插入乘号问题

java838277304 2011-03-29 07:59:52
在一个N位整数中插入R个乘号(1<=R<N<16), 将它分成R+1个整数,找出一种乘号的插入方法,使得这个R+1的整数的乘积最大
...全文
518 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 doox8086 的回复:]
如果要求最大乘积,那么 R 只能为 1;
整数 N > n1 * n2, 所以分解越多积越小

[/Quote]

++
shzhfu 2011-03-30
  • 打赏
  • 举报
回复
这个题中R应该是固定的。比如数2314中插入1个乘号,就是在2*314,13*14和231*4中选最大的一个。

可用动态规划解决。
shzhfu 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gufeijunchi 的回复:]
??????是越分解越多乘积越小
[/Quote]

假如将一个数C分成A,B两部分,其中B是n位数,则0<=B<10^n,于是
A*B < A*10^n <= A*10^n + B = C
所以中间插入一个乘号,乘积就比原数小。插入的乘号越多,结果就越小。
孤飞俊驰 2011-03-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 anyidan 的回复:]

引用 2 楼 doox8086 的回复:
如果要求最大乘积,那么 R 只能为 1;
整数 N > n1 * n2, 所以分解越多积越小



++
[/Quote]

??????是越分解越多乘积越小
Ulfsaar 2011-03-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 java838277304 的回复:]
在一个N位整数中插入R个乘号(1<=R<N<16), 将它分成R+1个整数,找出一种乘号的插入方法,使得这个R+1的整数的乘积最大
[/Quote]

这个题应该是别的意思,比如说还要乘上(R+1),不然这题根本没什么意义
無_1024 2011-03-29
  • 打赏
  • 举报
回复
无限中分 然后比较左右的值的大小判定中间的一位应该属于那一边
dooX8086 2011-03-29
  • 打赏
  • 举报
回复
如果要求最大乘积,那么 R 只能为 1;
整数 N > n1 * n2, 所以分解越多积越小

void resNum(unsigned int num)
{
if (10 > num) return;

unsigned int max = 0, l, r;
unsigned int ml, mr;
int bit = 10;

while (num > bit)
{
l = num / bit;
r = num - l * bit;

if (l * r > max)
{
max = l *r;
ml = l;
mr = r;
}

bit *= 10;
}

printf("%d >> %d * %d = %d",num, ml, mr, max);
}
MSOKD 2011-03-29
  • 打赏
  • 举报
回复
用因式分解就可以办到了

70,018

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧