您的位置:首页 > 编程语言 > C语言/C++

百练 / 2017研究生推免上机考试 A:因子分解

2018-03-18 10:51 253 查看
题目来源:http://noi.openjudge.cn/ch0113/22/
注:百练上已经结束的比赛只能看到题目但不能提交。但其实百练上所有比赛的题目都是openjudge题库里的,因此可以在百度上搜索
“#题目描述文字# site: openjudge.cn”

(site: openjudge.cn表示限定在site:openjudge.cn的站点中查询)在openjudge的其他小组中查到这道题目。申请加入该小组就能提交了。
-----------------------------------------------------

因子分解

-----------------------------------------------------总时间限制: 1000ms 内存限制: 65536kB描述输入一个数,输出其素因子分解表达式。输入输入一个整数 n (2 <= n < 100)。输出输出该整数的因子分解表达式。
表达式中各个素数从小到大排列。
如果该整数可以分解出因子a的b次方,当b大于1时,写做 a^b ;当b等于1时,则直接写成a。样例输入
60样例输出2^2*3*5 -----------------------------------------------------
解题思路
由于最大输入在100以内,故可以手动枚举100以内的质数表。
“质数-幂次”的数据结构用map存储。
-----------------------------------------------------
代码#include<stdio.h>
#include<map>
#include<string>
using namespace std;

static int zhiShu[29] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,57,59,61,67,71,73,77,79,83,87,89,91,97};

int main()
{
int n = 0;
scanf("%d", &n);    
map<int,int> fenJie;            // 不像java,C++实例化map的时候不要new
map<int,int>::iterator it;
int oldValue = 1;
int i=0;
for (i=0; i<29; i++)
{
while(n%zhiShu[i]==0)
{
n /= zhiShu[i];
fenJie[zhiShu[i]]++;    // 不管键值zhiShu[i]在不在map中,都只要这样写就行了,非常方便
}
if(n == 1)
{
break;
}
}
for (it = fenJie.begin(); it!= fenJie.end(); it++)
{
if(it != fenJie.begin())
{
printf("*");
}
printf("%d", it->first);
if(it->second != 1)
{
printf("^%d", it->second);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百练 Cpp map