在没有字符串或字符的帮助下找到数字的反向(例如:2500反向0025)

当最后有零时,是否有任何找到反向的技术。

在遵循%10技术的算法时,结果为52.并且0缺失。

我只是通过打印提醒(0的)来反过来。 但我不满意,因为我希望将答案显示为变量中的值。

请告诉我是否有任何技术将值005存储到变量并显示005(请不要使用字符串或字符或数组)。

数字存储为二进制0和1,因此它们总是具有被切断的前导0。 例如,64位整数具有64位位, 总是在打印时,这些前导0被丢弃。

您需要知道要保留多少前导零,并且在打印时只使用那么多。 即,您可以记录正常数字中有多少前导零而不编码,例如在开始时添加1。 即0052记录为10052 ,打印时跳过第一个数字。

如果您需要存储单个值,则可以执行以下操作。 我使用do / while使0变为10并打印为0 。 数字0是不是所有前导零都被丢弃的地方(否则它将为空)


这似乎是您想要的解决方案,它在C或C ++中应该基本相同

 static long reverse(long num) { long rev = 1; // the 1 marks the start of the number. do { rev = rev * 10 + num % 10; num /= 10; } while(num != 0); return rev; } // make the reversed number printable. static String toStringReversed(long num) { return Long.toString(num).substring(1); } long l = reverse(2500); // l = 10052 

另一种方法是随时打印数字,因此无需存储数字。

例如

 static void printReverse(long l) { do { System.out.print(l % 10); l /= 10; } while(l != 0); } 

或者您可以让输入记录数字位数。

 static void printReverse(long l, int digits) { for(int i = 0; i < digits; i++) { System.out.print(l % 10); l /= 10; } } // prints leading zero backwards as well printReverse(2500, 6); // original number is 002500 

版画

 005200 

您不能将具有前导零的整数表示为单个整数变量,该信息不是以整数分配位的方式的一部分。 您必须使用更大的东西,即字符串或单个(小整数)数字的数组。

您不能将它们存储在简单的整数变量中,因为它是二进制格式

00101与000101相同,它与101相同,只得到5.十进制数和二进制数之间的转换不考虑前导零,因此不可能存储具有相同整数变量的前导零。

你可以打印它,但你不能存储前导零,除非你使用一组int …

 int num = 500; while(num > 0) { System.out.print(num%10); num = num/10; } 

或者,您可以将前导零的计数存储为单独的实体,并在需要使用时将它们组合在一起。 如下所示。

 int num = 12030; boolean leading=true; int leadingCounter = 0; int rev = 0; while(num > 0) { int r = num%10; if(r == 0 && leading == true) leadingCounter++; else leading = false; rev = rev*10 + r; num = num/10; } for(int i = 1; i <= leadingCounter ; i++) System.out.print("0"); System.out.println(rev); 

我认为接受的答案是好的,因为它既反驳了错误的问题部分,也提供了可行的解决方案。 但是,代码中存在所有Java,并且它不会暴露最漂亮的API。 这是一个C ++版本,它基于接受答案的代码。

(哈哈,我所有的谈话,我的回答没有扭转字符串!最好的一天!)

回到学校并获得学位后,我想出了这个答案:它有一些可疑的“不使用字符串”或将任何值转换为字符串的说法。 当然,无法避免字符,因为我们最终打印的是值。

 #include  #include  class ReverseLong { public: ReverseLong(long value) { long num = value; bool leading = true; this->value = 0; this->leading_zeros = 0; while (num != 0) { int digit = num % 10; num = num / 10; if (leading && digit == 0) { this->leading_zeros += 1; } else { this->value = this->value * 10 + digit; leading = false; } } }; friend std::ostream & operator<<(std::ostream& out, ReverseLong const & r); private: long value; int leading_zeros; }; std::ostream & operator<<(std::ostream& out, ReverseLong const & r) { for (int i =0; i < r.leading_zeros; i++) { out << 0; } out << r.value; return out; }; int main () { ReverseLong f = ReverseLong(2500); // also works with numbers like "0"! std::cout << f << std::endl; / prints 0052 };