#include <stdio.h>
int main()
{
int num1, num2;
printf ("Input value for num1: ");
scanf ("%d", &num1);
printf ("Input value for num2: ");
scanf ("%d", &num2);
int prod =0, i;
for(i = 1; i <= num1; i ){
prod = num2;
}
int quo = 0 , rem = 0;
for(rem = num1 - num2; rem >= 0; rem = rem-num2) {
if(rem < 0)
break;
else
quo ;
}
//The last part is that i need to find the remainder without using multiplication, division and the modulo itself.
printf ("The product of %d and %d is: %d\n", num1, num2, prod);
printf ("The integer quotient of %d and %d is: %d\n", num1, num2, quo);
return 0;
}
uj5u.com熱心網友回復:
計算a mod b正整數a且b僅進行減法和加法的最簡單的解決方案是減去bfroma直到結果小于a。但是,如果b遠小于,則需要多次迭代a。
具有更好的最壞情況性能的方法如下:
#include <stdio.h>
unsigned rem(unsigned a, unsigned b)
{
if(b == 0) return 0; // Error
while(a >= b)
{
unsigned s = b;
do
{
a = a - s;
s = s s;
} while(a >= s);
}
return a;
}
int main(void)
{
unsigned example = rem(32453, 3);
printf("%u\n", example);
}
這種方法是基于這樣一個事實,為了更接近結果,我們可以減去任何b小于 的倍數a,因此在每次內部迭代中,我們嘗試減去上次迭代的倍數,直到減法器變得太大,我們以 的單個倍數重新開始b。
請注意,如果s = s s;超出unsigned范圍,這將給出錯誤的結果。因此,a不應大于 上限的一半unsigned。
uj5u.com熱心網友回復:
如果你想要一個緩慢的計算num1 % num2(即沒有乘法/除法),你可以這樣做:
// Calculate num1 % num2
unsigned rem(unsigned num1, unsigned num2)
{
if (num2 == 0) {.... error handling ....}
while (num1 >= num2) num1 -= num2;
return num1;
}
int main(void)
{
unsigned num1 = 42;
unsigned num1 = 3;
unsigned rem = rem(num1, num2);
printf("%u", rem);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/362965.html
上一篇:如何打破高層回圈?[復制]
下一篇:使用指標、動態分配、結構時出錯
