我需要一個輸出,如果數字是 5,輸出應該是 5 個二進制數,直到 5 但從 1 開始,下面給出了示例。這是在不使用陣列的情況下完成的
輸入:5 輸出:1,10,11,100,101
但我得到這樣的輸出 input=5 output=1,11,11,111,111
這個錯誤是由于錯誤的指令導致的任何提示或解決方案嗎
#include <stdio.h>
#include <math.h>
void binary_number(int n)
{
int bin_n = 0;
int i = 0;
while (n > 0)
{
bin_n = n % 2;
n = n / 2;
i ;
}
for (int j = i - 1; j >= 0; j--)
printf("%d", bin_n, j);
printf("\n");
}
void binary_number_generation(int n)
{
for (int i = 0; i <= n; i )
{
binary_number(i);
}
}
int main()
{
int n;
printf("Enter the end value:");
scanf("%d", &n);
printf("\nBinary Number from 1 to %d:", n);
printf("\n");
binary_number_generation(n);
}
在這里,我有一個新的代碼,我做了什么,但它確實給出了結果
#include <stdio.h>
int main()
{
int n,i=0,bin=0,plc,dig=0,j;
printf("Enter the n value : ");
scanf("%d",&n);
printf("\nBinary numbers from 1 to %d : ",n);
for(i=0;i<=n;i )
{
plc=0;bin=0;dig=0;
for(plc=1,j=i;j>0;j=j/2)
{
dig=j%2;
bin=bin (dig*plc);
plc=plc*10;
}
printf("%d\n",bin);
}
}
uj5u.com熱心網友回復:
據我了解,您的代碼即將將每個數字從 1 轉換為 n 為二進制形式
#include <stdio.h>
#include <math.h>
/* This function is to convert the number of digits and then calculate the rest of division
if it's 1 or 0 and then we will form the new number in binary form */
int binary_number(n)
{
int m=0,q=1,s=0;
while(n!=0)
{
s =(n%2)*q;
q*=10;
n/=2;
}
return s;
}
/* This number is using to display each number from 1 to n in binary form,
it's better to use an array in next time */
void binary_number_generation(int n)
{
for (int i = 0; i <= n; i )
{
printf("\n%d\n",binary_number(i));
}
}
int main()
{
int n;
printf("Enter the end value:");
scanf("%d",&n);
binary_number_generation(n);
printf("\n");
}
uj5u.com熱心網友回復:
我們以 6 為例。
6 10 = 1 * 2 2 1 * 2 1 0 * 2 0 = 110 2
通常,在構建二進制數時,您會使用陣列。但我們不能。但是,如果我們可以將 110 base 2(六)轉換為數字 110 base 10(一百一十)呢?
110 10 = 1 * 10 2 1 * 10 1 0 * 10 0
這看起來可行!
6 base 10 = 1 * 2^2 1 * 2^2 0 * 2^2 = 110 base 2
| | |
v v v
1 * 10^2 1 * 10^1 0 * 10^0 = 110 base 10
我們將這種格式稱為十進制編碼的二進制(對二進制編碼的十進制的參考)。
解決方法如下。在繼續閱讀之前,您應該嘗試自己實作它。
#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>
// Converts XYZ (base 2) to XYZ (base 10)
// 8 bit inputs require ceil(log2(11111111)) = 24 bit outputs.
// 16 bit inputs require ceil(log2(1111111111111111)) = 50 bit outputs.
uint64_t to_dcb(uint16_t n) {
uint64_t dcb = 0
uint64_t factor = 1;
while (n > 0) {
dcb = (n & 1) * factor;
n >>= 1;
factor *= 10;
}
return dcb;
}
int main(void) {
printf("%" PRIu64 "\n", to_dcb(6));
return 0;
}
uj5u.com熱心網友回復:
這是生成整數二進制表示的另一種方法。它有幾個問題,但是,它的優點是它以從左到右的順序生成數字,因此您可以立即將它們列印出來,而不必將它們存盤在陣列中。
void binary_number(int n)
{
int big = 32768;
while(big > 0) {
if(n >= big) {
putchar('1');
n -= big;
} else {
putchar('0');
}
big /= 2;
}
}
學生練習:修改它,使其不列印前導 0。
練習#2:如果你在一個大于 65535 的數字上嘗試這個函式會發生什么?你能修好它嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/346486.html
上一篇:日期檢查程式
