文章目录
一、C++函数引用传递
& 是取地址符号
也就是说,函数形参的改变,也会影响到实参的改变
引用传递是一种方便的传值方式
函数可以直接修改到实参的值
这让我也想到[指针传递] 这篇文章中的例子举得相当好(https://blog.csdn.net/weixin_42167759/article/details/89198245)
如只是使用该数据,则把改值直接传递给函数,直接做函数的参数即可;若需要在函数中对该数据进行更改,则需要把改值的地址当做函数的参数,进行传递。
二、质因子分解
思路:建立一个结构体 放置质因数和对应的指数
只需看这题:
PATA1059
首先 一个点格式错误这个实在是太坑了
与书上对比后发现,输出的1=1 是不需要换行的,
但是其他都需要换行…
真坑
#include <stdio.h>
#include <math.h>
using namespace std;
//开辟一个结构体,存放质因子和指数
struct factor
{
int x;
int cnt;
} fac[10];
const int maxn = 1000000;
int prime[maxn];
bool p[maxn] = {0};
int FindPrime() //用埃氏筛法获得素数表
{
int i, j;
int num = 0;
for (i = 2; i < maxn; i++)
{
if (p[i] == false)
{
prime[num++] = i;
for (j = i + i; j < maxn; j += i)
{
p[j] = true;
}
}
}
return num;
}
int main()
{
int number, i;
int sum = FindPrime();
int t = 0; //因子个数
bool flag = false;
scanf("%d", &number);
int cp = number;
fac[0].cnt = 0;
for (i = 0; i < sum; i++)
{
flag = false;
while (number % prime[i] == 0)
{
fac[t].x = prime[i];
fac[t].cnt++;
number /= prime[i];
flag = true; //表示进入过循环,t需要+1
}
if (flag)
{
t++;
fac[t].cnt = 0;
}
}
printf("%d=",cp);
if (cp == 1)
printf("1");
else
{
for (i = 0; i < t; i++)
{
if (fac[i].cnt == 1)
{
printf("%d", fac[i].x);
}
else if (fac[i].cnt > 1)
{
printf("%d^%d", fac[i].x, fac[i].cnt);
}
if (i != t - 1)
printf("*");
}
}
printf("\n");
}