#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,就正確了
求解,為何兩者有差
#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);
}
}
以上是正確的