【问题标题】:Formatting Commas into a long long integer将逗号格式化为 long long 整数
【发布时间】:2020-01-24 01:47:40
【问题描述】:

这是我第一次发布问题。我希望在一项我从未完成的非常古老的计算机科学任务上获得一些帮助。我不再上课了,只是想看看如何解决这个问题。

读入一个整数(任何有效的 64 位 integer = long long 类型)并输出相同的数字,但插入逗号。

如果用户输入 -1234567890,您的程序应该输出 -1,234,567,890。 Comm作为 应该出现在每三个有效数字之后(如果还有更多数字)开始 从小数点开始,向左移动到更有效的数字。如果数 输入不需要逗号,不要添加任何。例如,如果输入是 234 你 应该输出 234。输入 0 应该产生输出 0。注意上面的例子 该数字可以是正数或负数。您的输出必须保持 输入。

我对编程比较陌生,这就是我能想到的:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
  long long n;
  cout << "Enter an integer:" << endl;

    cin >> n;

        int ones = n % 10;
        int tens = n / 10 % 10;
        int hund = n / 100 % 10;
        int thous = n / 1000 % 10;
        int tthous = n / 10000 % 10;

    cout << tthous << thous << "," << hund << tens << ones << endl;

  return 0;
}

原作业禁止使用字符串、数组和向量,因此请不要提供涉及这些的建议/解决方案。 我知道可能需要某种 for 循环才能在必要的地方正确插入逗号,但我只是不知道如何实现这一点。

提前感谢任何提供帮助的人!

【问题讨论】:

标签: c++ integer long-integer long-long


【解决方案1】:

简单的解决方案是使用ios::imbue 设置一个可以为您完成所有工作的语言环境:

std::cout.imbue(std::locale(""));
std::cout << n << std::endl;

但是,如果限制不允许 strings 或 vectors 我怀疑这将是一个有效的解决方案。相反,您可以使用递归:

void print(long long n, int counter) {
    if (n > 0) {
        print(n / 10, ++counter);
        if (counter % 3 == 0) {
            std::cout << ",";
        }
        std::cout << n%10;

    }
}

void print(long long n) { 
    if (n < 0) {
        std::cout << "-";
        n *= -1;
    }
    print(n, 0); 
}

然后主要简单地调用print(n);

【讨论】:

  • 虽然我喜欢递归的想法,但您的解决方案似乎效果不佳(还)coliru.stacked-crooked.com/a/3a0823d54ea8c033
  • 我也喜欢这个解决方案。我接受了这个想法并对其进行了一些调整以使其工作(处理 0,处理负数,将逗号放在正确的位置),并传入std::ostream&amp; 而不是硬编码的std::cout。光滑。
【解决方案2】:

只是为了让您了解如何解决这个问题,我提供了一个简单的实现。请记住,这只是一个简单的示例:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
  long long n = -1234567890;

  if ( n < 0 )
    cout << '-';

  n = abs(n);

  for (long long i = 1000000000000; i > 0; i /= 1000) {
    if ( n / i <= 0 ) continue;
    cout << n / i ;
    n = n - ( n / i) * i;
    if ( n > 0 )
       cout << ',';
  }

  return 0;
}

http://coliru.stacked-crooked.com/a/150f75db89c46e99

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2017-10-03
    相关资源
    最近更新 更多