我必须将一个数字加到其乘法中,每个数字用*
(乘法符号)分隔。但是,当一个数字完全相乘(即,没有更多的倍数)时,预计会有一个空格而不是*
。我已经完成了大部分程序,但是间距让我感到困惑并且给了我一个错误的答案,每个答案中都有一个额外的答案" set"超过必要(这将在代码后显示)。任何解决方案/建议? (我知道我的代码强制我在每个号码后添加*
,但是,我不知道如何制作它以便它不会添加另一个号码。
#include <iostream>
using namespace std;
int main()
{
long int a, numb, mult;
cin>>a;
for (int i=0; i<a; i++)
{
cin>>numb;
int mult =2;
do{
if (numb%mult==0)
{numb/=mult;
cout<<mult<<"*";
mult=2; }//reset to two everytime it works
else
mult++;
if (mult==numb)
{cout<<" ";}
} while (mult<numb+1);
}
}
输入:
24
748931598137
466275117851
1314968912503
22379700293
1447643167643
1661926271899
2791977129181
1011164951317
654894646933
5597103144649
3057631770959
1161087606193
20104997131
834666701749
1609453631861
6967357950821
672835916659
1836903165421
1249178869333
858443597863
509391258631
1046982843367
2449157951257
1207036282367
输出:
109*137*277*331* 547*61*71*431*439* 569*113*197*239*439* 563*181*421*509* 577*53*241*431*439* 599*127*199*271*431* 563*97*241*449*461* 577*163*223*229*331* 367*83*107*307*401* 599*281*313*317*367* 547*193*223*257*491* 563*101*181*311*443* 461*197*347*491* 599*137*211*257*283* 397*127*233*271*419* 479*223*331*389*431* 563*107*157*283*307* 461*107*281*331*379* 487*197*233*233*271* 431*101*239*271*281* 467*61*73*353*541* 599*157*211*223*239* 593*79*283*431*433* 587*67*257*349*353* 569*
预期:
109*137*277*331*547 61*71*431*439*569 113*197*239*439*563 181*421*509*577 53*241*431*439*599 127*199*271*431*563 97*241*449*461*577 163*223*229*331*367 83*107*307*401*599 281*313*317*367*547 193*223*257*491*563 101*181*311*443*461 197*347*491*599 137*211*257*283*397 127*233*271*419*479 223*331*389*431*563 107*157*283*307*461 107*281*331*379*487 197*233*233*271*431 101*239*271*281*467 61*73*353*541*599 157*211*223*239*593 79*283*431*433*587 67*257*349*353*569
空白输出的替代程序:
#include <iostream>
using namespace std;
int main()
{
long int a, numb, mult;
bool prime = false;
cin>>a;
for (int i=0; i<a; i++)
{
cin>>numb;
int mult;
do{mult=2;
if (numb%mult==0)
{numb/=mult;
cout<<mult;
mult=2; //reset to two everytime it works
prime= true; }
else
mult++;
if (prime==true)
{
for (int mult=2; mult<numb+1; mult++)
{if (numb%mult==0) //can it be further multiplied?
cout<<"*";
break;} //we're just testing for one time
}
if (mult==numb)
{cout<<" ";}
} while (mult<numb+1);
}
}
答案 0 :(得分:0)
这是我在清理完代码后最终得到的结果。
关键是在打印'*'
字符之前检查您是否完成了编号因素。
#include <iostream>
using namespace std;
int main()
{
long int a, numb, mult;
cin>>a;
for (int i=0; i<a; i++)
{
cin>>numb;
int mult =2;
do{
if (numb % mult == 0)
{
numb /= mult;
cout << mult;
if(numb == 1)
cout << ' ';
else
cout << '*';
}
else
mult++;
} while (numb != 1);
}
cout << '\n';
}
例:
输入:3 5000 4999 4998
输出:2*2*2*5*5*5*5 4999 2*3*7*7*17