Care este greșeala făcută? Nu îmi afișează ceea ce trebuie
#include <cstdio>
int main ()
{
int n, v[1000], i, d, nd, r, uc, e, p;
FILE *f;
//citire vector din fisier
f= fopen("operatii_numere.in", "r");
fscanf(f, "%i", &n);
for(i=0; i<n; i++)
{
fscanf(f, "%i", &v[i]);
}
fclose(f);
//afisare vector pe ecran
printf("vectorul are %i elemente: \n", n);
for(i=0; i<n; i++)
{
printf(" %i", v[i]);
}
printf("\n");
//numere prime, numere neprime
for(i=0; i<n; i++)
{
for(d=1; d<=n; d= d+1)
{
r=0;
if(v[i]%d==0)
{
printf("%c", d);
nd= nd+1;
}
printf("%i are %i divizori\n", v[i], nd);
if(nd==2)
{
printf("%i este prim\n", v[i]);
uc= v[i]%10;
r= r*10+uc;
printf("rasturnatul numarului %i este %i", v[i], r);
}
else
{
printf("%i nu este prim\n", v[i]);
p = 2;
while (p * p <= v[i])
{
e = 0;
while (v[i] % p == 0)
{
v[i] = v[i] / p;
++e;
}
if (e > 0)
{
printf("%i la puterea %i\n", p, e);
}
++p;
}
if (v[i] > 1)
{
printf("%i la puterea 1\n", v[i]);
}
}
}
}
return 0;
}
Răspunsuri la întrebare
tu ai foarte multe greseli in programul tau (verificarea de primalitate, algoritmul de rasturnare) etc. asa ca ti-am refacut programul complet
te sfatuiesc pe viitor sa iti structurezi programul in mici functii, sa-ti imparti efortul, astfel incat sa poti intelegi mai usor ce faci
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("operatii_numere.in");
int v[10001], n;
int prim(int x) {
if (x <= 1)
return 0;
for (int d = 2; d <= x / 2; d++)
if (x % d == 0)
return 0;
return 1;
}
int invers(int x) {
int rev = 0;
while (x != 0) {
rev = rev * 10 + x % 10;
x /= 10;
}
return rev;
}
void dpfp(int x) {
int d = 2, p;
while (x > 1) {
p = 0;
while (x % d == 0) {
x /= d;
p++;
}
if (p != 0)
cout << d << " la puterea " << p << endl;
d++;
}
}
int main() {
f >> n;
for (int i = 1; i <= n; i++) {
f >> v[i];
if (prim(v[i]) == 1 || v[i] == 1)
cout << invers(v[i]) << endl;
else {
cout << endl << "numarul nu e prim, deci se va descompune in urmatorul produs:" << endl;
dpfp(v[i]);
cout << endl;
}
}
f.close();
return 0;
}