DEMO +1000
Forumas
C++ skaitmenų skaičiavimas skaičių cikle
Tomas (+4567)
funkcija, nustatanti skaičių nuo 1 iki a skaitmenų sumą:
int SkaitmenuSuma(int a)
{
int sum=0;
int kiek;
for(int i=1;i<=a;i++)
{
kiek=log(i)/log(10)+1;
sum+=kiek;
}
return sum;
}
DEMO +1000
Tomai,
aš tau tuoj turėsiu pradėti siųsti dovanas už pagalbą. Ačiū!
Belieka pasigilinti į log metodą.
Tomas (+4567)
Jeigu neaišku tai galiu parašyti kaip ten yra su tuo logaritmu:
Tarkime skaičius [tex]x[/tex] yra n-ženklis, tada teisinga nelygybė:
[tex]10^{n-1}≤x<10^n[/tex]
Logaritmuodami nelygybes dešimtainiu logaritmu gauname:
[tex]n-1≤lgx<n[/tex]
Pridėję 1 gauname:
[tex]n≤lgx+1<n+1[/tex]
Kadangi n ir n+1 yra greta esantys natūralieji skaičiai, vadinasi:
[tex]n=[lgx+1]=[lgx]+1[/tex], kur [lgx]-skaičiaus lgx sveikoji dalis.
Pritaikę pagrindo keitimo formulę turime: [tex]lgx=\dfrac{lnx}{ln10}[/tex]
Programoje natūrinis logaritmas rašomas ne ln, o log, taigi ir gauname, kad skaičiaus x skaitmenų skaičius lygus: [tex]logx/log10+1[/tex]
DEMO +1000
Tomai,
gal dar galėtum padėti su:

Įkeliu darbinį kodą, kokį esu pasirašęs. Viskas gerai pirmame ir trečiame testuose (be k papildymo). Nepavyksta parašyti kodo, kad pirmadieniais būtų papildymas.//Darbas56
#include <io.h>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Lithuanian");
int k; // Kiðenpinigiai ct. 25
int s; // Butelio sulèiø kaina. 10
int b; // Butelio supirkimo kaina. 3
int i; // Savaitës diena. 2
int n; // Kiðenpinigiai i-àjà dienà. 15
int buteliuS;
int tarosP;
int skaiciavimoK;
wcout << "Kiek kiðenpinigiø Jonas gauna kiekvienà savaitæ? "; cin >> k;
wcout << "Kiek kainuoja butelis sulèiø? "; cin >> s;
wcout << "Kokia butelio supirkimo kaina? "; cin >> b;
wcout << "Kelintà savaitës dienà Jonas nusprendþia kasdien pirkti sultis? "; cin >> i;
wcout << "Kiek kiðenpinigiø Jonas turi " << i << "-àjà savaitës dienà? "; cin >> n;
tarosP = 0;
buteliuS = 0;
for (int j = i; j <= 7; j++)
{
n = n + tarosP;
skaiciavimoK = n / s;
n = n - skaiciavimoK * s;
tarosP = 0;
tarosP = tarosP + skaiciavimoK * b;
if (skaiciavimoK >= 1) buteliuS = buteliuS + skaiciavimoK;
}
wcout << buteliuS << endl;
return 0;
}
purexlt (+225)
Pamomentavau kode.#include <iostream>
#include <fstream>
using namespace std;
//----------------------------------------------------------------------------
void Skaitymas(int &k, int &s, int &b, int &i, int &n)
{
ifstream fd("duom.txt");
fd >> k >> s >> b >> i >> n;
fd.close();
}
//----------------------------------------------------------------------------
int main()
{
int k, // kisenpinigiai (gaunami kiekviena pirmadieni)
s, // vieno sulciu butelio kaina
b, // pelnas uz parduota tuscia buteli
i, // dabartine diena (1<=i<=7)
n, // turimi kisenpinigiai
kiek = 0, // kiek isgali nusipirkti buteliu
temp = 0; // tarpinis kintamasis, saugoti iperkamu buteliu kiekiui
Skaitymas(k,s,b,i,n);
while(n>=s || i==1){ // Prekiaujama tol, kol isgalima nusipirkti bent viena buteli arba ta diena yra Pirmadienis
if(i==1) n += k; // Pirmadienis
while(i <= 7){
temp = n/s;
kiek += temp;
if(temp>0){
n -= temp*s;
n += temp*b;
}
i++;
}
if(temp>0) i = 1;
else break; // jei neisgalejo nusipirkti bent vieno butelio, baige prekyba
}
cout << kiek << endl;
return 0;
}
Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »
