分解质因数求教

wubaoguo2019 2020-01-20 05:55:53
写了一个按格式输出质因数的程序,结果是对的,但是对这个输出部分有些疑问,按道理说最后一个质因数后面不是还有一个星号(*)吗?代码如下:
#include<iostream>
using namespace std;
bool isPrime(unsigned n) {
for (int i = 2;i <= sqrt(n);i++)
if (n % i == 0)
return false;
return true;
}
int main() {
unsigned a;
cout << "Enter a plus integer: ";
cin >> a;
cout << a << "=";
for (int i = 2;i <= a / 2;i++)
if (a % i == 0 && isPrime(i))
{
cout << i <<"*";
a = a / i;
i = 1; //这里应该是1而不是2
}

cout << a << " ";
return 0;
}
输出如下:
12=2*2*3
这个结果是对的,但最后一个质因数后面的“*”号去哪里了?
...全文
131 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wubaoguo2019 2020-01-21
  • 打赏
  • 举报
回复
非常感谢各位的回复!感觉还是学得不够细啊。
寻开心 2020-01-20
  • 打赏
  • 举报
回复
if ( a%i==0 && isPrime(i)) 这是说i能整除a,并且i是素数
a=12进入,遇到i=2的时候, 满足条件,输出了2*, a变成6,i重新从2开始
a=6进入,遇到i=2的时候,满足条件,继续输出2*,a变成3, i重新从2开始
注意for的循环条件, 从2开始到a/2结束, 此时i<=3/2 不成立, 所以循环体直接退出了

再次输出 a 和之后的“ ”, 就得到最后的3和后面的空格
寻开心 2020-01-20
  • 打赏
  • 举报
回复
最后一个3不是在for循环里面输出的, 是在循环地外的,return前面输出的, 这里没有*啊

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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