- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
//
Fraction Fraction::operator +(Fraction &ob)
{
int f;int d; int c; int k; int l; int z;
char*p; char*x;
p=new char; x=new char;
Fraction tempOb;
if(strcmp(znam, ob.znam)==0)
{
f=atoi(tempOb.chisl);
d=atoi(ob.chisl);
c=atoi(chisl);
f=d+c;
k=atoi(tempOb.znam);
l=atoi(znam);
k=l;
p=itoa(f,p,10);
x=itoa(k,x,10);
strcpy(tempOb.chisl,p);
strcpy(tempOb.znam,x);
}
else
{
f=atoi(tempOb.chisl);
d=atoi(ob.chisl);
c=atoi(chisl);
k=atoi(ob.znam);
l=atoi(znam);
f=c*k+d*l;
z=atoi(tempOb.znam);
z=l*k;
p=itoa(f,p,10);
x=itoa(z,x,10);
strcpy(tempOb.chisl,p);
strcpy(tempOb.znam,x);
}
tempOb.operator ~();
return tempOb;
}
//
Нашел баг с переполнением, если вводишь слишком большие числа. Пытаюсь сделать через char. Работает. Но такие фрагменты кода убивают. Реально сделать легче, а еще лучше если сразу через int?
unfunk 23.06.2010 11:10 # 0
жесть. это работает?
KoirN 23.06.2010 11:17 # 0
unfunk 23.06.2010 11:50 # 0
KoirN 23.06.2010 13:26 # 0
Webkill 23.06.2010 17:55 # −6
100% не испортит. ни один серьёзный аллокатор на 32битной архитектуре не выделит ровно один байт. будет выравнивание хотя бы до четырёх.
unfunk 23.06.2010 17:56 # 0
Webkill 23.06.2010 17:59 # −5
хотя сиплюс может завести мемпул для чаров, чтобы лишний раз не трогать общую кучу... кто знает... там выравнивания не нужны...
pushkoff 24.06.2010 19:31 # +2
Webkill 24.06.2010 19:53 # −3
ForEveR 23.06.2010 23:22 # 0
pushkoff 24.06.2010 19:29 # +1
единственное почему оно работает, это то что гранулярность new под виндой в mscrt 8 байт...
ForEveR 24.06.2010 23:49 # 0
pushkoff 25.06.2010 12:30 # 0
либо передавать буфер размером больше 12 байт (p=new char[16]), любой инт влезет в такой буфер... либо в крайнем случае можно использовать snprintf...
DarthBobr 23.06.2010 19:16 # 0
ForEveR 23.06.2010 23:23 # 0