,同時使用代碼::塊IDE和C++,表達等 result[i] += ((res*1.0 /10)-(res/10)) * 10;
解決問題,如果有合適的表達式的結果是8分配給result[i]
後它成爲如圖7所示,所以result[i]
持有7代替8爲什麼gcc在分配表達式時從表達式中減去1?
這裏是整個功能: 它需要兩個數字並將它們中的每一個轉換爲一個數組。例如。 34變成{4,3}
,所以我將數字添加爲數組,而不是正常數字。
void add(char a, char b)
{
//get # digits of both
int n1=0;
int n2=0;
char temp1=a;
char temp2=b;
//counting # digits of first number
while((temp1*1.0/10) != 0)
{
n1++;
temp1/=10;
}
//counting # digits of second number
while((temp2*1.0/10) != 0)
{
n2++;
temp2/=10;
}
int maxi=max(n1,n2);
int mini=min(n1,n2);
//filling arr1 arr2
char * arr1=new char[n1];
char * arr2=new char[n2];
char * result=new char[maxi+1];
//fill result with zeros
for(int k=0; k<maxi+1; k++)
result[k]=0;
temp1=a;
for(int i=0; i<n1; i++)
{
arr1[i]=((temp1*1.0 /10)-(temp1/10)) * 10;
temp1/=10;
}
temp2=b;
for(int j=0; j<n2; j++)
{
arr2[j]=((temp2*1.0 /10)-(temp2/10)) * 10;
temp2/=10;
}
//add both arrays
char res=0;
char overflow=0;
for(int i=0; i<maxi; i++)
{
if(i<mini)
{
res=arr1[i]+arr2[i];
if(checkDigit(res))
{
result[i]=res;
}
else
{
////////////////////////////
//>>>>>>>> result[i] += ((res*1.0 /10)-(res/10)) * 10;
///////////////////////////
overflow=res/10;
result[i+1]=overflow;
}
}
else
{
if(n1<n2)
{
result[i]+=arr2[i];
}
else if(n2<n1)
{
result[i]+=arr1[i];
}
}
}
if(!checkDigit(result[maxi-1]))
{
// assign overflow before
result[maxi]=result[maxi-1]/10;
result[maxi-1]=((result[maxi-1]*1.0 /10)-(result[maxi-1]/10)) * 10;
}
for(int i=0; i<maxi+1; i++)
cout<<(int)result[i]<<endl;
}
爲什麼不在計算之前打印出'result [i]'中已有的內容? – Galik
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – deviantfan
@Galik'結果[i]'包含零 –