#10657: 求解~~~~ &的問題


karta080197 (unknown)

學校 : 國立臺南第一高級中學
編號 : 53439
來源 : [27.105.152.198]
最後登入時間 :
2018-08-28 12:06:00
c014. 10035 - Primary Arithmetic -- UVa10035 | From: [219.85.190.23] | 發表日期 : 2016-01-26 18:50

#include<iostream>
#include<stdio.h>
using namespace std;
void divide(int n,int arr[],int cnt){ //無&
while (n>=10){
arr[cnt]=n%10;
n/=10;
cnt++;
}
arr[cnt]=n;
}
int main(void)
{
int a,b;
while(cin>>a>>b && (a!=0||b!=0)){
int lenA,lenB;
int arrA[11]={},arrB[11]={},sum[12]={};
divide(a,arrA,lenA);
divide(b,arrB,lenB);
int len=max(lenA,lenB);
int cnt=0;
for (int i=0;i<len;i++){
sum[i]+=(arrA[i]+arrB[i]);
if (sum[i]>=10){
sum[i]-=10; sum[i+1]++; cnt++;
}
}
if (cnt==0) printf("No carry operation.\n");
else if (cnt==1) printf("1 carry operation.\n");
else printf("%d carry operations.\n",cnt);

}
}

 

在int cnt那裏,如果沒加上&執行就會爆掉

如果我改成 int &cnt,就正確了

求解,為何兩者有差

 
#10658: Re:求解~~~~ &的問題


karta080197 (unknown)

學校 : 國立臺南第一高級中學
編號 : 53439
來源 : [27.105.152.198]
最後登入時間 :
2018-08-28 12:06:00
c014. 10035 - Primary Arithmetic -- UVa10035 | From: [219.85.190.23] | 發表日期 : 2016-01-26 18:53

#include
#include
using namespace std;
void divide(int n,int arr[],int cnt){ //無&
while (n>=10){
arr[cnt]=n%10;
n/=10;
cnt++;
}
arr[cnt]=n;
}
int main(void)
{
int a,b;
while(cin>>a>>b && (a!=0||b!=0)){
int lenA,lenB;
int arrA[11]={},arrB[11]={},sum[12]={};
divide(a,arrA,lenA);
divide(b,arrB,lenB);
int len=max(lenA,lenB);
int cnt=0;
for (int i=0;i<len;i++){
sum[i]+=(arrA[i]+arrB[i]);
if (sum[i]>=10){
sum[i]-=10; sum[i+1]++; cnt++;
}
}
if (cnt==0) printf("No carry operation.\n");
else if (cnt==1) printf("1 carry operation.\n");
else printf("%d carry operations.\n",cnt);

}
}

 

在int cnt那裏,如果沒加上&執行就會爆掉

如果我改成 int &cnt,就正確了

求解,為何兩者有差




#include<iostream>

#include<stdio.h>

using namespace std;

void divide(int n,int arr[],int &cnt){ //有加&cnt

for (cnt=0;n!=0;cnt++){

arr[cnt]=n%10;

n/=10;

}

}

int main(void)

{

int a,b;

while(cin>>a>>b && (a!=0||b!=0)){

int lenA,lenB;

int arrA[11]={},arrB[11]={},sum[12]={};

divide(a,arrA,lenA);

divide(b,arrB,lenB);

int len=max(lenA,lenB);

int cnt=0;

for (int i=0;i<len;i++){

sum[i]+=(arrA[i]+arrB[i]);

if (sum[i]>=10){

sum[i]-=10; sum[i+1]++; cnt++;

}

}

if (cnt==0) printf("No carry operation.\n");

else if (cnt==1) printf("1 carry operation.\n"); 

else printf("%d carry operations.\n",cnt);

 

}

}

以上是正確的

 
ZeroJudge Forum