- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须编写一个程序来读取 2 个数字中不带 0 的整数,并说明第二个是否由第一个的循环变换构成。例如:4123,3412,2341 和 1234 是由 1234 循环变换而成。现在这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int last_digit, a, temp, i, b;
int digits = 0, digits1 = 0;
printf("Enter two numbers to test if the second is a circular\n");
printf("transformation of the first.");
printf("\n\n**NOTE**\nThe numbers cannon have 0 in their digits.\n\na= ");
scanf("%d", &a);
while (a <= 0)
{
printf("Number must be greater than 0.\na= ");
scanf("%d", &a);
}
temp = a;
while (temp!=0)
{
digits1++;
temp/=10;
}
printf("b= ");
scanf("%d", &b);
while (b <= 0)
{
printf("Number must be greater than 0.\nb= ");
scanf("%d", &b);
}
while (digits != digits1)
{
digits = 0;
temp = b;
while (temp!=0)
{
digits++;
temp/=10;
}
if (digits != digits1)
{
printf("The two numbers must have the same number of digits.\nb= ");
scanf("%d", &b);
}
}
temp = b;
digits--;
for (i=1;i<=digits1;i++)
{
if (temp == a)
{
printf("%d is a circular transformation of %d",b,a);
return 0;
}
printf("\ntemp = %d",temp);
last_digit = temp % 10;
temp = temp/10;
printf("\n%d\n%d",last_digit,temp);
temp = temp + (last_digit*(pow(10,digits)));
printf("\ntemp = %d\n",temp);
}
printf("%d is not a circular transformation of %d",b,a);
return 0;
}
在您说任何话之前,我必须在不使用表格和其他东西的情况下做这件事……只是基础知识。现在我的问题是
temp = temp + (last_digit*(pow(10,digits)));
没有正常工作。如果数字超过 2 位,它会给出它应该给出的结果 - 1。
我该怎么做才能解决这个问题?跟编译器有关系吗?我在代码块中使用 GCC。
如果我愿意
temp = temp + (last_digit*(pow(10,digits))) + 1;
它适用于超过 2 位数字的数字,而不适用于 2 位数字的数字。
最佳答案
#include <stdio.h>
typedef long Value;
#define SCN_Value "ld"
#define PRI_Value "ld"
static int num_digits(Value number)
{
Value n0 = number;
int r = 0;
int ndigits = 0;
while (number != 0)
{
ndigits++;
if (number % 10 == 0 && r++ == 0)
fprintf(stderr, "Number %" PRI_Value " should not have any zero digits\n", n0);
number /= 10;
}
return ndigits++;
}
static Value prompt_for(char const *tag)
{
Value number = -1;
while (printf("%s = ", tag) > 0 &&
scanf("%" SCN_Value, &number) == 1 &&
number <= 0)
{
printf("Number (%" PRI_Value ") must be greater than 0.\n", number);
}
return number;
}
int main(void)
{
Value num1, num2;
printf("Enter two numbers to test if the second is a circular\n");
printf("transformation of the first.\n");
printf("**NOTE**\nThe numbers cannot have 0 as one of their digits.\n");
if ((num1 = prompt_for("a")) < 0)
return 1;
int digits1 = num_digits(num1);
if ((num2 = prompt_for("b")) < 0)
return 1;
while (digits1 != num_digits(num2))
{
printf("The two numbers must have the same number of digits.\n");
if ((num2 = prompt_for("b")) < 0)
return 1;
}
Value pow_10 = 1;
for (int i = 1; i < digits1; i++)
pow_10 *= 10;
Value temp = num2;
for (int i = 1; i <= digits1; i++)
{
if (temp == num1)
{
printf("%" PRI_Value " is a circular transformation of %" PRI_Value "\n", num2, num1);
return 0;
}
int last_digit = temp % 10;
temp /= 10;
temp = temp + last_digit * pow_10;
printf("rotation = %" PRI_Value "\n", temp);
}
printf("%" PRI_Value " is not a circular transformation of %" PRI_Value "\n", num2, num1);
return 0;
}
关于dec 中的循环变换 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940969/
我必须编写一个程序,将无符号十六进制转换为十进制,将十进制转换为十六进制,将有符号十六进制转换为十进制,将十进制转换为十六进制,而不使用流过滤器“十六进制”和“十进制”。我的程序适用于 hex 到 d
'2009-12 Dec' should be converted to '31-DEC-2009' '2010-09 Sep' should be converted to '30-SEP-2010
我想在串行监视器中写入一个十六进制数,这应该转换为十进制整数。 LCDShield lcd; byte byteR; int color = 0; if (Serial.available()) {
我需要一些帮助,将我从汽车中的 OBD 适配器获得的答案转换为十进制,然后将转换后的任何值添加到公式并打印出来。 private class ConnectedThread extends Threa
我必须编写一个程序来读取 2 个数字中不带 0 的整数,并说明第二个是否由第一个的循环变换构成。例如:4123,3412,2341 和 1234 是由 1234 循环变换而成。现在这是我的代码: #i
Delphi documentation表示可以重载 Inc 和 Dec 运算符;我认为没有有效的方法可以做到这一点。以下是重载 Inc 运算符的尝试;有些尝试会导致编译错误,有些会导致运行时访问冲突
在 Meteor 排行榜示例中有这一行: Players.update(Session.get("selected_player"), {$inc: {score: 5}}); 我怎样才能优雅地减
实际上我猜这个问题是重复的,但我不明白我的 SQL 代码有什么问题。我的错误是 Notice: Undefined index: CI in C:\wamp\www\LOCATIONVIEWER\ex
我有: std::cout << "Start = " << std::dec << (&myObject) << std::endl; 以十进制输出地址。但是,地址仍然是十六进制的?? (我正在为
我想将二进制字符串转换为 dec。 public class HelloWorld{ public static void main(String []args){ Syst
我在 Delphi 2010 中使用 Inc 和 Dec 过程时遇到问题。 这是我的代码片段: if NOT(frmMain.Height = 0) then begin Dec(frmMain.
在反汇编代码中: movsx eax,[address1] # a few fpu computations dec eax # so many fpu computations jz label2
我正在尝试使用 findAndModify 以原子方式更新文档的一个值,根据我的阅读,这在同一文档中是原子的。根据我的单元测试,这些值没有被修改。 我在 Java 中使用 mongoTemplate,
我正在用 C++ 创建一个包含 3 列 Dec Okt Hex 的表格。 输入应该是一个大于或等于1的整数,然后打印一个三列的表格,其中从1到加载的所有整数以十进制、八进制和十六进制指定。 例如我们输
字符串 str_hex 包含字母 A-J 的十六进制值,对应于十进制值 65-74。我正在尝试将每个十六进制值转换为其十进制值 following this example .它适用于 for 循环内
由于本学期我在物理学校学习了数字系统类(class),所以我决定尝试将我们在那里学到的知识应用到我自学的编程实践中。是的,出于某种原因我们根本不这样做。不管怎样,下面是我的代码: #include
00101=5位数字,忽略两个零并计算 0+(5-2-1)^2 = 4 4+(5-3-1)^2 = 5 5+(5-4-1)^2 = 5 最终答案是否正确? char[] charArray = bin
作为练习的一部分,我必须重写一个递归函数,以使新函数不递归。这两个函数都需要将正十进制整数输入转换为它们的等效二进制数。 这是使用递归的代码: void convert(int n) { //recu
此代码将 unsigned long vector 变量 cR1 转换为 NB_ERRORS 数字(在 a 变量中我打印了这些数)。 #include #include #include int
我在将十六进制值转换为带符号的十进制值时遇到问题。我正在使用 Qt,这是示例代码。 #include #include int main(int argc, char *argv[]) {
我是一名优秀的程序员,十分优秀!