?? jiechen.cpp
字號:
#include "stdafx.h"
#include ".\jiechen.h"
#include <iostream>
#include <string>
using namespace std;
//#using <mscorlib.dll>
//using namespace System;
jiecheng::jiecheng(int number)
{
num=number;
data=new bit[500];
data->dangqianwei=1;
data->jinwei=0;
currentlen=500;
for(int i=1;i<currentlen;i++)
{
(data+i)->dangqianwei=0;
(data+i)->jinwei=0;
}
next=0;
weishu=0;
this->str="";
}
jiecheng::~jiecheng(void)
{
delete []data;
}
int jiecheng::inflate()
{
bit *d=new bit[currentlen+500];
if(d==0)
{
cerr<<"Alloction Error"<<endl;
exit(0);
}
for(int i=0;i<=next;i++)
{
d[i].dangqianwei=(data+i)->dangqianwei;
d[i].jinwei=(data+i)->jinwei;
}
for(int i=next+1;i<currentlen+500;i++)
{
d[i].dangqianwei=0;
d[i].jinwei=0;
}
currentlen+=500;
delete []data;
this->data = d;
return 1;
}
void jiecheng::chen(int n){
int zj=(data->dangqianwei)*n;
(data)->jinwei=zj/1000;//changed
(data)->dangqianwei=zj-data->jinwei*1000;//changed
for(int i=1;i<=next;i++)
{
int k=( (data+i)->dangqianwei )*n+(data+i-1)->jinwei;
//if( next>=currentlen-1)
// inflate(500ement);
(data+i)->jinwei=k/1000;//changed
(data+i)->dangqianwei= k -1000*(data+i)->jinwei;//changed
}
zj=(data+next)->jinwei;
while(zj>0)
{
if(next>=currentlen-1)
{
this->inflate(500);
}
next++;
(data+next)->dangqianwei=zj-(zj/1000)*1000; //changed
zj=zj/1000;//changed
}
}
void jiecheng::start()
{
if(num!=0){
for(int i=1;i<=num;i++)
{
chen(i);
}
}
int shouwei=(data+next)->getd();
if(shouwei/100)
weishu=3*(next+1);
else if(shouwei/10)
weishu=3*next+2;
else
weishu=3*next+1;
}
System::String __gc* jiecheng::tostring()
{
int k;
for(k=0;k<=next;k++)
if(this->data[k].getd()!=0)
break;
if(next<10)
{
int shouwei=(data+next)->dangqianwei;
if(this->weishu%3==0) //changed
{
char buffer;
sprintf(&buffer,"%d",shouwei/100);
*str=*str+ buffer;
*str=*str+".";
if((shouwei-100* (shouwei/100) )/10==0)
{
*str=*str+'0';
char buffer;
sprintf(&buffer,"%d",shouwei%10);
*str=*str+buffer;
}
else{
char buffer[2];
sprintf(buffer,"%d",shouwei%100);
*str=*str+buffer;
}
}
else if(weishu%3==2)
{
char buffer;
sprintf(&buffer,"%d",shouwei/10);
*str=*str+buffer;
*str=*str+".";
if(shouwei%10==0)//可簡
*str=*str+"0";
else
{
sprintf(&buffer,"%d",shouwei%10);
*str=*str+buffer;
}
}
else
{
char buffer;
sprintf(&buffer,"%d",shouwei);
*str=*str+buffer;
*str=*str+".";
}
for(int i=next-1;i>=k;i--)
{
if(data[i].getd()/10==0)
{
*str=*str+"00";
char buffer;
sprintf(&buffer,"%d",data[i].dangqianwei);
*str=*str+buffer;
}
else if(data[i].getd()/100==0)
{
*str=*str+"0";
char buffer[2];
sprintf(buffer,"%d",data[i].dangqianwei);
*str=*str+buffer;
}
else{
char buffer[3];
sprintf(buffer,"%d",data[i].dangqianwei);
*str=*str+buffer ;
}
}
*str=*str+"e+";
char b[10];
sprintf(b,"%d",weishu-1);
*str=*str+b;
}
else{
//處理科學計數時的四舍五入問題
if( (data[next-11].getd()/100 )>=5)//changed
{
data[next-11].setj(1);
for(int i=next-10;i<=next&&data[i-1].getj()>0;i++)
{
data[i].setj( (data[i].dangqianwei+ data[i-1].jinwei )/1000 ); //changed
data[i].setd( (data[i].dangqianwei+ data[i-1].jinwei) %1000 );
}
}
int shouwei=(data+next)->dangqianwei;
if(shouwei/100)
{//changed
char buffer;
sprintf(&buffer,"%d",shouwei/100);
*str=*str+buffer;
*str=*str+".";
if( (shouwei-100* (shouwei/100) )/10==0)
{
*str=*str+"0";
char buffer;
sprintf(&buffer,"%d",shouwei%10);
*str=*str+buffer;;
}
else
{
char buffer[2];
sprintf(buffer,"%d",shouwei%100);
*str=*str+buffer;
}
}
else if(shouwei/10)
{
char buffer;
sprintf(&buffer,"%d",shouwei/10);
*str=*str+buffer;
*str=*str+".";
if(shouwei%10==0)
*str=*str+"0";
else
{
char buffer;
sprintf(&buffer,"%d",shouwei%10);
*str=*str+buffer;
}
}
else
{
char buffer;
sprintf(&buffer,"%d",shouwei);
*str=*str+buffer;
*str=*str+".";
}
for(int i=next-1;i>next-11&&i>=k;i--)
{
if(data[i].getd()/10==0)
{
*str=*str+"00";
char buffer;
sprintf(&buffer,"%d",data[i].dangqianwei);
*str=*str+buffer;
}
else if(data[i].getd()/100==0)
{
*str=*str+"0";
char buffer[2];
sprintf(buffer,"%d",data[i].dangqianwei);
*str=*str+buffer;
}
else{
char buffer[3];
sprintf(buffer,"%d",data[i].dangqianwei);
*str=*str+buffer ;
}
}
*str=*str+"e+";
char b[10];
sprintf(b,"%d",weishu-1);
*str=*str+b;
}
return *str;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -