Kod w wersji #1. http://ideone.com/Wrx8iG
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
struct huge {vector<char>num; huge();};
huge::huge(){num.reserve(101);for(int i=0;i<100;++i) num.push_back(0);}
inline huge stoh(string input)
{
huge res;
for(int i=input.size()-1;i>=0;--i)
res.num[101-input.size()+i]=int(input[i]-'0');
return res;
}
inline huge read(void)
{
string res;
while(!isdigit(cin.peek())) cin.ignore();
char hlp=cin.get(); while(isdigit(hlp)) {res+=hlp; hlp=cin.get();}
return stoh(res);
}
inline string out(huge output)
{
int i=0; while(output.num[i]==0) ++i;
string res; for(;i<101;++i) res+=char('0'+output.num[i]);
return res;
}
int main()
{
cout << out(read());
//huge a=read(); cout << out(a);
return 0;
}
Wejście:
700
Wyjście:
700
Tak jak powinno być.
Wersja #2. http://ideone.com/dLQVw3
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
using namespace std;
struct huge {vector<char>num; huge();};
huge::huge(){num.reserve(101);for(int i=0;i<100;++i) num.push_back(0);}
inline huge stoh(string input)
{
huge res;
for(int i=input.size()-1;i>=0;--i)
res.num[101-input.size()+i]=int(input[i]-'0');
return res;
}
inline huge read(void)
{
string res;
while(!isdigit(cin.peek())) cin.ignore();
char hlp=cin.get(); while(isdigit(hlp)) {res+=hlp; hlp=cin.get();}
return stoh(res);
}
inline string out(huge output)
{
int i=0; while(output.num[i]==0) ++i;
string res; for(;i<101;++i) res+=char('0'+output.num[i]);
return res;
}
int main()
{
//cout << out(read());
huge a=read(); cout << out(a);
return 0;
}
Wejście:
700
Tak samo.
Wyjście:
70)
(???)
Jest to dla mnie totalnie niepojęte. Obie wersje tego samego kodu różnią się tylko i wyłącznie tym, że w wersji 1 wynik funkcji read() jest przekazywany bezpośrednio do funkcji out(), a w wersji 2 za pośrednictwem zmiennej a.
Co jest, czy funkcja read() działa inaczej, gdy przekazuje wynik innej funkcji, a inaczej, gdy zapisuje go do zmiennej?
Co robię nie tak?
Z góry dzięki.