连接两个整数

发布于 2025-01-01 19:35:31 字数 171 浏览 1 评论 0原文

在 Fortran 中将两个整数连接成一个整数的最佳方法是什么?

integer a = 999
integer b = 1111

integer c 应该是 9991111

谢谢, SM。

What is the best way to concatenate two integers to an integer in Fortran?

integer a = 999
integer b = 1111

integer c should be 9991111

Thanks,
SM.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甚是思念 2025-01-08 19:35:31

这是一个示例代码,可以满足您的需要。它将整数写入字符串,修剪并连接它们,然后从连接的字符串中读取结果整数:

integer :: a,b,c
character(len=99) :: char_a,char_b,char_c

a = 999
b = 1111

write(unit=char_a,fmt=*)a
write(unit=char_b,fmt=*)b

char_c = trim(adjustl(char_a))//trim(adjustl(char_b))

read(unit=char_c,fmt=*)c

print*,c

end

编辑:请注意,此示例适用于任何整数长度,假设它们适合各自的种类 (没有整数溢出)。

Here is an example code that does what you need. It writes integers into character strings, trims and concatenetes them, and then reads the result integer from concatenated character string:

integer :: a,b,c
character(len=99) :: char_a,char_b,char_c

a = 999
b = 1111

write(unit=char_a,fmt=*)a
write(unit=char_b,fmt=*)b

char_c = trim(adjustl(char_a))//trim(adjustl(char_b))

read(unit=char_c,fmt=*)c

print*,c

end

Edit: Note that this example is general for any integer lengths, assuming they fit into their respective kind (no integer overflow).

生生漫 2025-01-08 19:35:31

您可以使用号码顺序信息:

integer :: a = 999
integer :: b = 1111

integer :: c

c = a * 10**(ceiling(log10(real(b)))) + b

write(*,*) c

You can use the information of the order of the number:

integer :: a = 999
integer :: b = 1111

integer :: c

c = a * 10**(ceiling(log10(real(b)))) + b

write(*,*) c
往日 2025-01-08 19:35:31

最好的选择是使用 内部文件 将两个整数转换为字符,然后将其转换回整数。

没有将数值转换为字符/字符串表示形式的内在过程。有关详细信息,请参阅 Fortran Wiki 上的讨论(请参阅标题为“注释”的部分)。

例如,在您的情况下,您可以使用以下内容:

program test_conversion
  implicit none

  integer :: a=999
  integer :: b=1111
  integer :: c

  character(len=7) :: temp

  write(temp, '(i3.3, i4.4)') a, b ! You may need to change these format specifiers

  read(temp, *) c

  print*, c ! This prints 9991111

end program test_conversion

如果您想要不同宽度的整数字符表示形式,则必须更改格式字符串。

Your best bet is to use internal files to convert your two integers to a character, and then convert this back to an integer.

There is no intrinsic procedure for converting a numeric value to a character/string representation. See this discusson on Fortran Wiki for more information (see the part headed "Note").

As an example, in your case you could use the following:

program test_conversion
  implicit none

  integer :: a=999
  integer :: b=1111
  integer :: c

  character(len=7) :: temp

  write(temp, '(i3.3, i4.4)') a, b ! You may need to change these format specifiers

  read(temp, *) c

  print*, c ! This prints 9991111

end program test_conversion

You will have to change the format string if you want different widths of the character representation of your integers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文